[英]How can I write a regular expression that matches two or more characters in any order?
嘗試使我的正則表達式適用於以下規則:
我認為這個正則表達式很接近,但無法正常工作。
/^(?=(?:\\D*\\d){2,}\\D*$)(?=(?:[^az]*[az]){2,}[^az]*$)(?=(?:[^AZ]*[AZ]){2,}[^AZ]*$)(?=(?:[^!@#$%^&*]*[!@#$%^&*]){2,}[^!@#$%^&*]*$)[a-zA-Z0-9!@#$%^&*]{8,21}$/
使用適當的語法先行:
^(?=.*[A-Z].*[A-Z])(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9])(?=.*[!@#$%^&*()].*[!@#$%^&*()])[a-zA-Z0-9!@#$%^&*]{8,21}$
例如,您正在做什么:
(?=(?:[^a-z]*[a-z]){2,}[^a-z]*$)
這表示要從密碼開頭匹配任意數量的非小寫字母,再跟一個小寫字母,相同的超前兩次 。 請記住,先行聲明有效,但不匹配或不移動,因此您只檢查了一個小寫字母兩次。 要檢查至少兩個小寫字母,請使用:
(?=.*[a-z].*[a-z])
這將檢查密碼中任何地方的兩個小寫字母。
我會不知所措,並且猜測您被要求“生成將驗證應用程序密碼的正則表達式”。
1)閱讀密碼規則是胡扯 。 查看您是否可以說服領導,團隊或客戶更改這些規則(總額)。 特別是,將最大長度提高到至少32,然后放棄其他規則。
2)我已經知道您可能無法做到這一點,因此至少可以做到這一點,以便您的應用程序可以清楚地說明哪個密碼規則被破壞。 按順序對每個規則進行單獨的檢查(如建議的Lancelod),並為每個規則提供清晰的面向用戶的失敗消息。
3)如果可以這樣做,您甚至可能不需要該特定規則的正則表達式-有時經典的字符串掃描會更簡單,通常會更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.