亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的正則表達式 /(?=^[az]+\d{2,})(?=\w{5,})/ 模式有什么問題?

我的正則表達式 /(?=^[az]+\d{2,})(?=\w{5,})/ 模式有什么問題?

繁星淼淼 2023-07-20 17:30:11
此正則表達式必須匹配長度超過 5 個字符、不以數字開頭且具有兩個連續數字的密碼。所有測試用例都通過正則表達式測試。我的正則表達式是/(?=^[a-z]+\d{2,})(?=\w{5,})/我必須使用兩個正向前瞻來解決這個問題才能通過測試。但 astr1on11aut 沒有通過測試。為什么?
查看完整描述

4 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

該正則表達式通過了所有測試

/(?=\w*\d\d)(?=\w{5,})(?=^[^0-9]\w*)/

我相信你可以通過拆分第一組來解決你的問題。


查看完整回答
反對 回復 2023-07-20
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

由于第一個前瞻模式,您的正則表達式失敗(?=^[a-z]+\d{2,})。字符串“astr1on11aut”以小寫字母開頭:


astr1on11aut

^^^^

這匹配^[a-z]+. 然而,模式的下一部分需要兩個或更多數字\d{2,},但字符串在該位置只有一個:


   astr1on11aut

       ^^

       ||

digit -+|

        + --- not a digit

這會導致第一個先行模式失敗。

您可以使用三個前瞻更清晰地表達驗證規則:

  • “長度超過 5 個字符:(?=.{5,})

  • “不要以數字開頭”:^(?!\d)

  • “并且有兩個連續的數字”:(?=.*\d{2})

如果我們把它們放在一起我們得到/(?=.{5,})(?!^\d)(?=.*\d{2})/

const regex = /^(?=.{5,})(?!\d)(?=.*\d{2})/;


test("abc");

test("123");

test("123abc");


test("abc123");

test("astr1on11aut");


test("., ;_'@=-%");

test("., ;_'@123=-%");


function test(string) {

  console.log(`${string} : ${regex.test(string)}`);

}

請注意,此正則表達式不需要letter。嚴格遵循要求,唯一明確要求的是數字。由于未指定任何其他輸入的類型,因此它可以是任何內容(使用.)。編寫正則表達式時最好不要做出太多假設,否則可能會阻止合法輸入。



查看完整回答
反對 回復 2023-07-20
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

如果您不限于使用單個正則表達式,我建議將其分成使用您的宿主語言(例如 JavaScript)的多個測試:


if (input.match(/^\D/)

    && input.match(/\d{2}/)

    && input.length >= 5) {

  // password policy fulfilled

}


查看完整回答
反對 回復 2023-07-20
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

這對你有用嗎?

(?=^\D.{5,}$).*(?=\d{2,})

第一個先行斷言字符串不得以數字開頭,但長度至少為 6 個字符;第二個斷言必須至少有 2 個連續數字。


查看完整回答
反對 回復 2023-07-20
  • 4 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號