在视图模型中,我有以下正则表达式属性,但它不起作用。
[RegularExpression(@"(?=[A-Z]+)(?=[a-z]+)(?=[0-9]+)", ErrorMessage = "Password must contain digits as well as lower and upper case letters.")]
因此,密码字符串必须包含至少一个小写字母,一个大写字母和至少一个数字。
我看着 Regular Expressions: Is there an AND operator? 但是我无法使它发挥作用。感谢任何帮助。感谢。
答案 0 :(得分:1)
首先,在您的前瞻子句中需要.*
才能使这些字符位于匹配字符串中的任何位置。没有它 - 所有这些角色都必须在你的字符串的开头。
其次,您需要实际拥有一个捕获子句,否则您将获得一个空匹配 - 这将被视为无效(为什么?见下文)。所以
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]*
会为您提供完整的匹配密码。你也可以在这里检查密码长度 -
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{8,}
密码长度必须大于8个字符。
至于为什么需要正则表达式捕获的值,RegexValidationAttribute
' IsValid(object value)
方法使用以下逻辑语句返回,如果输入的值根据正则表达式有效。 (其中m
是给定值上给定模式的Match
,stringValue
是给定值)
return (m.Success && m.Index == 0 && m.Length == stringValue.Length);
考虑您是否具有.{3,8}
的验证RegEx - 意味着长度为3到8个字符的任何字符串。您尝试验证值123456789
。正则表达式匹配此字符串! 12345678
长度在3到8个字符之间!实际上,23456789
也是如此。而且123
就此而言。仅检查匹配是不够的,您必须进一步检查整个值是否匹配。
答案 1 :(得分:0)
在您的环视中使用.*
以符合您的条件。
(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])