簡體   English   中英

密碼的按需正則表達式

[英]On Demand Regular Expression for Password

我需要為密碼創建一個正則表達式,其強度設置可以由客戶端更改。 強度參數如下:

在此處輸入圖片說明

最小和最大長度可以通過AngularJS ngMinlength和ngMaxlength來處理。

但是我需要生成一個正則表達式,該正則表達式將由從數據庫中獲取的參數動態創建。

我可以像這樣從JSON獲取這些參數:

var minCharLength = pwdJSON.minCharLength;
var minCapCharLength = pwdJSON.minCapCharLength;
...
var regex = // What to do now?

我沒有正則表達式制作的知識。 另外,此正則表達式還將用於在C#服務器上進行驗證。 請提出建議!

我認為這可以做到:

^(?=(?:.*[A-Za-z].*){6})(?=(?:.*[A-Z].*){1})(?=(?:.*[0-9].*){2})(?:[a-zA-Z0-9*#$%]){8,16}$

最后輸入相關限制(字母,大寫字母,數字,最小和最大長度)以及非逗號分隔的特殊字符的位置

編輯添加帶有變量的示例...您只需將字符串構建為regex模式,然后對其進行測試

string regex = "^(?=(?:.*[A-Za-z].*){" + minCharLength + "})(?=(?:.*[A-Z].*){" + minCapCharLength + "})(?=(?:.*[0-9].*){" + minNumLength + "})(?:[a-zA-Z0-9" + specialChars + "]){" +  overallMinLength + "," + overallMaxLength + "}$"; 
bool isValid = Regex.IsMatch(password, regex);

EDIT2-我認為不勝感激:-)

  • 我們使用^$將正則表達式錨定到整個字符串
  • 每個測試都是正面的前瞻(?= )因此它檢查是否存在但不移動位置
    • 測試具有分組(?:.*[our_characterset].*){how_many_times} -因此,非捕獲組可以在字符串中的任何點(帶有.* )有效地搜索我們的字符正確次數
  • 最后,我們得到了允許的字符(包括特殊字符)必須出現在最小和最大長度之間(使用{m,n} )(使用錨點)

正則表達式模式只是一個字符串-因此我們可以使用表單中的變量來構建它。

使用單個正則表達式,您可以告訴用戶其密碼不符合安全要求。 但是,我會自行檢查每個條件。 這樣,您就可以打印出更具表現力的錯誤消息,例如“您的密碼必須至少包含8個字符”。 “您的密碼必須至少包含2個大寫字母。”

可以使用string.Length屬性檢查長度。

對於其他條件,您可以為每個條件定義一個字符類(括號)並計算匹配數:

  • 計算數量: Regex.Matches(password, "[0-9]").Count
  • 計算字母: Regex.Matches(password, "[A-Za-z]").Count (或Regex.Matches(password, "[\\p{L}]" ).Count是否要允許像ä這樣的字母, Ö,ß)
  • 計算大寫字母: Regex.Matches(password, "[AZ]").Count

最后一個條件(附加字符)需要一個字符類,該字符類是上述字符加上輸入字段中指定的其他字符的組合:

string regex = "^[A-Za-z0-9(?#additional characters go here)]*$";
bool isValid = Regex.IsMatch(password, regex);

其他字符必須動態添加。 您可以使用Regex.Escape轉義*$等字符

暫無
暫無

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

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