2016-02-05 76 views
2

https://secure.www.cartier.cn/zh-cn/服務/my-cartier/RegistrationStep1.html 我正在使用下面的RegEx來驗證我的密碼,使用jQuery驗證。密碼驗證不起作用

$.validator.addMethod("passwordTest", function(value, element) { 
      return this.optional(element) || /^(?=.*\d)[0-9a-zA-Z\!\@\#\$\%\^\&\*\)\(\+\=\.\_\-\?\}\{\]\[\>\<\"\\\/\'\:\;]{8,}$/i.test(value); 
     }, _objPropertiesMsg.passWeak); 

規則適用於密碼驗證在CARE-8804中提到:

min 8 alphanumerical chars 
combination of letters & numbers 
no consecutive repeat of a char more than 2 times 

據工作到8個字符,但上述8個字符的所有驗證失敗。 也連續2次字符檢查失敗,只接受8個數字。

+0

檢查此鏈接 - 正則表達式...的https://regex101.com/r/hE7lN6/2 –

回答

0

我想這通常不是一個好主意,試圖在一個正則表達式中檢查所有條件。

相反,只需使用純javascript檢查長度,對連續出現的字符數不超過兩次的字符進行正則表達式檢查,並確保至少有一位數字後跟非數字或其他方式各地:

$.validator.addMethod("passwordTest", function(value, element) { 
      return this.optional(element) || value.length>=8 && /^((.)\2?(?!\2))+$/i.test(value) && /(\d[^\d]|[^\d]\d)/.test(value); 
     }, _objPropertiesMsg.passWeak); 

有在概念證明一臺機子在https://jsfiddle.net/jvL151ya/

+0

感謝您的答覆。它也採取特殊字符。例如!@ test12和!@ test12test應該失敗。 –

+0

我又增加了一個條件/^[a-zA-Z0-9]+$/i..test(value)。並驗證罰款。 –

+0

我第一次沒有得到這種情況。但要做到這一點,你不必添加其他條件。只需用'[a-z0-9]'替換'(。)',只有字母數字字符串匹配。證明:https://jsfiddle.net/jvL151ya/1/ ...使用'i'-modificator(使匹配大小寫不敏感)時,不需要在表達式中具有「A-Z」和「a-z」。一個就足夠了,並且保持簡單。另外:您可能想重新考慮不允許特殊字符的決定。安全起見,允許他們是有道理的。 –