簡體   English   中英

至少匹配 m 個組中的 n 個的正則表達式

[英]Regular Expression matching at least n of m groups

我打算編寫一個正則表達式,它僅在字符串包含至少 n 個不同類別的字符時才匹配。 我打算用它來強制我的用戶創建強密碼,並想檢查密碼是否至少包含以下 3 個:

  • 人物
  • 大寫字符
  • 數字
  • 特殊字符

如果所有這些類都存在,則編寫一個匹配的正則表達式使用前瞻是微不足道的。 但是,我不能圍繞“至少 3”部分。 這甚至可能(在一個漂亮、緊湊的表達式中)還是我必須創建一個怪物表達式?

我認為這將比列出 4 個中的 3 個的每個可能組合更緊湊。它利用負前瞻來確保整個字符串不是僅由您列出的一個或兩個字符類組成:

(?!([a-zA-Z]*|[a-z\d]*|[^A-Z\d]*|[A-Z\d]*|[^a-z\d]*|[^a-zA-Z]*)$).*

按順序,這里的組是:

  • 下和/或上
  • 低位和/或數字
  • 較低和/或特殊
  • 大寫和/或數字
  • 上層和/或特殊
  • 數字和/或特殊

如果整個字符串(因為負前瞻中的$ )僅包含來自上述任何組的字符,則此正則表達式將失敗。

您必須為 4 個中的 3 個(總共四個表達式)的每個可能組合編寫一個表達式,然后 | 將各個表達式放在一起,以便如果它們至少滿足原始表達式之一,則它們通過。

您如何看待這個解決方案?

var str='23khkS_s';

var countGroups=0;
if(str.match(/[a-z]+/))
    countGroups++;
if(str.match(/[A-Z]+/))
    countGroups++;
if(str.match(/[0-9]+/))
    countGroups++;
if(str.match(/[-_!@#$%*\(\)]+/))
    countGroups++;

console.log(countGroups);

您可以使用 4 個小 RE,而不是使用 1 個類似怪物的表達式。 然后使用變量countGroups ,其中包含已加工字符組的數量。 我希望它有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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