密码的DataAnnotation的正则表达式

时间:2012-06-05 23:34:02

标签: c# .net regex asp.net-mvc data-annotations

我们要求确保密码符合特定的强度格式(这是在web.config中配置的)。要求是密码必须包含一定数量的大写字符和一定数量的非字母数字字符。我想使用正则表达式来注释我的Password属性,该表达式验证密码以确保密码包含x个CAPS和y个非alpha字符。请帮助正则表达。

2 个答案:

答案 0 :(得分:3)

在单个正则表达式中检查这样的多个条件最好使用前瞻,例如说你想要3个大写字符和4个非字母字符,你可以使用以下正则表达式:

^(?=(?:.*[A-Z]){3})(?=(?:.*[^a-zA-Z]){4})

说明:首先,让我们考虑一下只检查第一个条件的正则表达式。要匹配3个大写字符,我们可以使用以下内容:

(?:.*[A-Z]){3}

我们仍然可以通过将它放在前瞻内部来检查这种情况,这是(?=...)所做的,所以现在(?=(?:.*[A-Z]){3})检查这种情况而不消耗任何字符。此时我们可以使用(?:.*[^a-zA-Z]){4}检查第二个条件。我把第二个条件放在了前瞻中,这样就可以直接添加更多的支票。

请注意,当前正则表达式实际上不会匹配任何字符,如果所有条件都匹配,它将匹配字符串的开头(零个字符),否则匹配将失败。如果您希望它实际消耗字符,只需将.*添加到最后。

答案 1 :(得分:2)

我找到了一篇很好的文章,为我解决了这个问题 http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/