4 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
該正則表達(dá)式通過了所有測(cè)試
/(?=\w*\d\d)(?=\w{5,})(?=^[^0-9]\w*)/
我相信你可以通過拆分第一組來解決你的問題。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
由于第一個(gè)前瞻模式,您的正則表達(dá)式失敗(?=^[a-z]+\d{2,})。字符串“astr1on11aut”以小寫字母開頭:
astr1on11aut
^^^^
這匹配^[a-z]+. 然而,模式的下一部分需要兩個(gè)或更多數(shù)字\d{2,},但字符串在該位置只有一個(gè):
astr1on11aut
^^
||
digit -+|
+ --- not a digit
這會(huì)導(dǎo)致第一個(gè)先行模式失敗。
您可以使用三個(gè)前瞻更清晰地表達(dá)驗(yàn)證規(guī)則:
“長(zhǎng)度超過 5 個(gè)字符:
(?=.{5,})
“不要以數(shù)字開頭”:
^(?!\d)
“并且有兩個(gè)連續(xù)的數(shù)字”:
(?=.*\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)}`);
}
請(qǐng)注意,此正則表達(dá)式不需要letter。嚴(yán)格遵循要求,唯一明確要求的是數(shù)字。由于未指定任何其他輸入的類型,因此它可以是任何內(nèi)容(使用.
)。編寫正則表達(dá)式時(shí)最好不要做出太多假設(shè),否則可能會(huì)阻止合法輸入。

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
如果您不限于使用單個(gè)正則表達(dá)式,我建議將其分成使用您的宿主語(yǔ)言(例如 JavaScript)的多個(gè)測(cè)試:
if (input.match(/^\D/)
&& input.match(/\d{2}/)
&& input.length >= 5) {
// password policy fulfilled
}

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
這對(duì)你有用嗎?
(?=^\D.{5,}$).*(?=\d{2,})
第一個(gè)先行斷言字符串不得以數(shù)字開頭,但長(zhǎng)度至少為 6 個(gè)字符;第二個(gè)斷言必須至少有 2 個(gè)連續(xù)數(shù)字。
添加回答
舉報(bào)