首先,你需要.*
您先行条款内,使这些字符是在匹配的字符串的任何位置。没有这些 - 所有这些角色都必须在你的字符串开头。第二,你需要实际上有一个捕获子句,否则你会得到一个空匹配 - 这将被视为无效(为什么?见下文)。所以
(?=.*[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);
View the source yourself
考虑,如果你具有.{3,8}
的验证正则表达式 - 这意味着三年之间的任何字符串八个字符的长度。您尝试验证值123456789
。正则表达式匹配这个字符串! 12345678
长度在三到八个字符之间!其实,23456789
也是。和123
,就此而言。只检查比赛是不够的,你必须进一步检查整个值是否匹配。
谢谢你的字符串长度提示呢! – erdinger
乐意帮忙。如果不明确,该正则表达式的[A-Za-z0-9]部分假定这些是您的密码数据唯一有效的字符集。你可能需要适当调整它,或者将它改为'。{8,}',让它接受任何长度为8+的字符(仍然是三个前提条件匹配的地方)。 –