簡體   English   中英

PHP和Javascript中密碼匹配的正則表達式

[英]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}$

DEMO

要匹配不包含兩個以上重復字符的字符串,您需要使用否定先行,例如(?!.*(.).*\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM