[英]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.