我需要为密码创建一个正则表达式,其强度设置可以由客户端更改。 强度参数如下 -
最小和最大长度可由AngularJS ngMinlength和ngMaxlength处理。
但是我需要生成一个正则表达式,它将通过从db中获取的参数动态创建。
我可以从这样的JSON中获取这些参数:
var minCharLength = pwdJSON.minCharLength;
var minCapCharLength = pwdJSON.minCapCharLength;
...
var regex = // What to do now?
我没有正则表达式制作的知识。此外,此正则表达式还将用于使用C#在服务器上进行验证。请提出建议!
答案 0 :(得分:1)
我认为这样做会:
^(?=(?:.*[A-Za-z].*){6})(?=(?:.*[A-Z].*){1})(?=(?:.*[0-9].*){2})(?:[a-zA-Z0-9*#$%]){8,16}$
您放入相关限制(字母,大写字母,数字,最小和最大长度)以及最后非逗号分隔的特殊字符
编辑使用变量添加示例...您只需将字符串构建为正则表达式模式,然后使用它进行测试
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}
- 因此非捕获组有效地在字符串中的任何一点(.*
s)正确搜索我们的字符{m,n}
)(使用锚点)正则表达式模式只是一个字符串 - 所以我们可以使用表单中的变量来构建它。
答案 1 :(得分:0)
使用单个正则表达式,您可以告诉用户他的密码不符合安全要求。但是,我会自己检查每个条件。这允许您打印更具表现力的错误消息,例如“您的密码必须包含至少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, "[A-Z]").Count
最后一个条件(附加字符)需要一个字符类,它是上述字符的组合加上输入字段中指定的其他字符:
string regex = "^[A-Za-z0-9(?#additional characters go here)]*$";
bool isValid = Regex.IsMatch(password, regex);
必须动态添加其他字符。您可以使用Regex.Escape来转发*
或$