更新::
密码强度:
包含以下四个类别中的三个字符:
是否可以将两个字段值(输入)与正则表达式进行比较...如果是,那么请将另一个条件添加到上面的列表中。
答案 0 :(得分:3)
编辑:这个答案是在编辑问题之前编写的。它最初包括不包括用户帐户名称的要求,且长度至少为8个字符。
鉴于您无论如何都需要使用用户的帐户名称,您是否有任何理由想要将其作为正则表达式?您可能希望使用正则表达式来表达四个类别的模式(尽管还有其他方法)但我会单独编写规则。例如:
// Categories is a list of regexes in this case. You could easily change
// it to anything else.
int categories = Categories.Count(regex => regex.IsMatch(password));
bool valid = password.IndexOf(name, StringComparison.OrdinalIgnoreCase) == -1
&& password.Length >= 8
&& categories >= 3;
答案 1 :(得分:1)
如果你需要在一个表达式中执行它,它应该是这样的:
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:])).{8,}$
正向前瞻((?=.*[a-z])
)用于检查字符串是否包含您想要的字符组。
这里的问题是,你想要4个中的3个,这意味着你必须对所有允许的组合进行交替。
最后一部分.{8,}
然后匹配字符串并检查至少8个字符。
^
和$
是锚点,用于将模式锚定到字符串的开头和结尾。
[!%,.;:]
是一个字符类,在这里您可以添加要包含的所有字符。对于所有标点符号,使用像\p{P}
这样的Unicode脚本可能更简单。有关详细信息,请参阅regular-expresssions.info
<强>更新强>
将密码与输入的用户名进行比较,它们必须不同
通常你应该能够使用字符串连接来构建正则表达式。我不知道你把正则表达式放在你的情况下是怎么回事......
像这样(伪)
String Username = "FooBar";
regex = "^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!%,.;:])|(?=.*[a-z])(?=.*[0-9])(?=.*[!%,.;:])|(?=.*[A-Z])(?=.*[0-9])(?=.*[!%,.;:]))(?i)(?!.*" + Username + ").+$";
我在这里也使用内联修饰符(?i)
来匹配它独立的情况。 (?!.*
是否定前瞻的开始,意味着字符串不应包含...