0

我是 .net 新手,遇到了一个问题,我想验证我的密码字段,密码必须是带有特殊符号的字母数字字符串,我为此编写了一个代码,如下所示

[Required(ErrorMessage = "Password is required")]
[RegularExpression(@"^[a-zA-Z0-9~!@#$%^&*]{8,15}$", ErrorMessage = "Password is not in proper format")]
public virtual string Password { get; set; }

但是如果密码长度大于 8 则它不起作用,那么即使它只包含字母,它也会为字符串提供绿色信号。我该如何克服这个问题

4

3 回答 3

2

你可以使用这个正则表达式

^(?=.*[a-zA-Z\d])(?=.*[~!@#$%^&*])[a-zA-Z\d~!@#$%^&*]{8,15}$
 ---------------- -----------------
    |            |->match further only if there's any one of [~!@#$%^&*]
    |-> match further only if there's any one of [a-zA-Z0-9]
于 2013-05-14T09:18:58.837 回答
0

问题是 - 现在您只是检查由这些字符组成的长度为 8 到 15 的字符串。如果要确保至少有一个特殊字符,则需要 [!@#$%^&*]+ 之类的内容。

于 2013-05-14T09:09:14.007 回答
0

您可以使用积极的前瞻断言来确保字符串的某些条件:

[RegularExpression(@"(?=.*[a-zA-Z0-9])(?=.*[~!@#$%^&*])[a-zA-Z0-9~!@#$%^&*]{8,15}", ErrorMessage = "Password is not in proper format")]

当您使用正则表达式验证器时,您不需要锚点,正则表达式会自动与整个输入字符串匹配。

(?=.*[a-zA-Z0-9])正在从字符串的开头检查字符串中某处是否有字母或数字。

(?=.*[~!@#$%^&*])正在从字符串的开头检查字符串中某处是否有特殊字符。

[a-zA-Z0-9~!@#$%^&*]{8,15}然后实际上匹配字符串,只允许允许的字符。

于 2013-05-14T09:43:23.820 回答