[英]Regular expression for Password match in PHP and Javascript
我已經為密碼策略匹配建立了一個正則表達式,但是它不能按預期工作
/((?=。 \\ d)(?=。 [az])(?=。 [AZ])(?=。 [@#\\ $%!])(?!(。)* \\ 1 {2, })。{6,20})/
Password must satisfy below rules
->必須為1位數字
->必須有1個大寫字母
->必須有1個小寫字母
->必須具有給定列表中的1個特殊字符
->最少6個字符長
->最大20個字符長
->不超過2個相同的字符`
所以它匹配
aDm!n1,Adw1n @
但它不能低於aaaD!n1 teSt @ 111
我搜索了此正則表達式,發現“(?!(。)* \\ 1 {2,})”無法正常工作
我不明白為什么即使它具有前瞻性的負面主張,它也不起作用。
提前致謝
您必須提供起點和終點錨點。
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%\!])(?!.*(.).*\1.*\1).{6,20}$
要匹配不包含兩個以上重復字符的字符串,您需要使用否定先行,例如(?!.*(.).*\\1.*\\1)
,它斷言我們要匹配的字符串最多包含兩個重復字符。
(?!)
負向超前檢查,檢查是否沒有 .*
任何字符零次或多次。 (.)
捕獲了一個字符。 .*
任何字符零次或多次。 \\1
引用組索引1。即,它引用組1已捕獲的字符。 .*
任何字符零次或多次。 \\1
反向引用組索引1中存在的字符。 碼:
> var re = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%\!])(?!.*(.).*\1.*\1).{6,20}$/;
undefined
> re.test('aDm!n1')
true
> re.test('Adw1n@')
true
> re.test('tetSt@11')
false
(?:(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%!])(?!.*(.).*\1.*\1).{6,20})
您需要這個。請看演示。
http://regex101.com/r/hQ9xT1/22
您的正則表達式失敗了cos
(?!(.)*\\1{2,})
不能工作,因為它找到連續的重復字符,而不是三個或三個以上的字符。因此請使用(?!.*(.).*\\1.*\\1)
。
var re = /^(?:(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%!])(?!.*(.).*\1.*\1).{6,20})$/gm;
var str = 'aaaD!n1\nteSt@111\naDm!n1\nAdw1n@';
var m;
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.