在asp.net中常用 RegularExpressionValidator 来对密码的格式进行第一次验证。现有密码格式要求如下: 长度8-12位。 至少有一个字母。 至少有一个数字。 至少有一个特殊字符(非数字和字母的字符,例如:!@#$%等)。 在MSDN里找 asp.net membership密码强度验证 相关的东西,里面有对6位以上,至少一数字和特殊字符的正则表达式如下" (?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,}) "。当我把短代码复制到 RegularExpressionValidator 里面才发现,即使是符合的规定的密码也不能通过验证。 查看asp.net的js文件,找到调用 RegularExpressionValidator 的函数: function RegularExpressionValidatorEvaluateIsValid(val) { var value = ValidatorGetValue(val.controltovalidate); if (ValidatorTrim(value).length == 0) { return true; } var rx = new RegExp(val.validationexpression); var matches = rx.exec(value); return matches != null && value == matches[0]; } (?=pattern) 就是所谓的“正向预查”,是个“非获取匹配”,也就是说如果不能匹配 (?=pattern) 的话,matches的值是null,即使匹配了,matches[0](最后一次匹配的值)的值也是空("")。 根据以上,修改 RegularExpressionValidator 中的 ValidationExpression 为" (?=.{8,12})(?=.*[0-9]+)(?=.*[a-zA-Z]+)(?=.*\W+) (.*) "