簡體   English   中英

如何編寫以任意順序匹配兩個或多個字符的正則表達式?

[英]How can I write a regular expression that matches two or more characters in any order?

嘗試使我的正則表達式適用於以下規則:

  • 總共至少8個字符。
  • 不大於21。
  • 應包含至少兩個大寫
  • 應包含至少兩個小寫
  • 應包含至少兩個數字
  • 應至少包含以下兩個符號!@#$%^&*()
  • 所有字符都可以任意排列,而不必重復序列。
  • (添加了Edit)不能包含上面未指定的任何其他字符。

我認為這個正則表達式很接近,但無法正常工作。

/^(?=(?:\\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.

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