2

在我的模型中,我为简单的密码验证指定了一个正则表达式

[Required(ErrorMessage="Error")]
[RegularExpression("(?=.{6,})(?=.*\\d)|(?=.*\\W)", ErrorMessage= "Error")]
public string Password { get; set; }

正如预期的那样,这会产生一个 html 元素

<input class="textbox-regular" data-val="true" data-val-regex="Error" data-val-regex-pattern="(?=.{6,})(?=.*\d)|(?=.*\W)" data-val-required="Error" id="Password" name="Password" type="password" />

这是一个有效的 JavaScript 正则表达式,但密码从不匹配。这是 JQuery 验证器的限制吗?

谢谢

4

3 回答 3

1

尽管有单个正则表达式可以满足我的需求,但我可以通过将其分解为 3 个验证来获得更好的用户体验,以便用户获得有关所需内容的特定消息。例如

[Required(ErrorMessage="Please enter a password")]
[StringLength(100, MinimumLength = 6, ErrorMessage = "Password must be at least 6 characters long")]
[RegularExpression("(.*\\d.*)|(.*[@#$%^&+=\\*].*)", ErrorMessage = "Password must contain a digit or special character")]
于 2012-04-25T20:43:19.720 回答
1

你的陈述包含三个积极的、前瞻性的断言。积极的前瞻性断言不会返回找到的内容,因此我认为您不会在没有返回任何内容时生成真值。这样的东西会产生你需要的东西吗?

((?=.*\W)|(?=.*\d)).{6,}

或在您的字符串中:

"((?=.*\\W)|(?=.*\\d)).{6,}"

在这里,我断言至少会有六个东西,它们必须包含非单词字符或数字。六个或更多字符将被返回,因为我没有将它放在积极的前瞻断言中。因为只有当里面的值与这些断言匹配时才会返回值,所以用户输入应该适当地通过检查。

在这里试验一下

有效的正则表达式并不意味着它会匹配您期望它匹配的内容。您希望匹配的究竟是什么?

我的假设是您希望将至少六个字符与至少一个数字或至少一个非单词字符匹配?

于 2012-04-24T18:04:47.983 回答
1

这是令人惊讶的,因为它应该匹配几乎所有东西。
验证器是否应该在匹配或失败时显示错误消息?

也许正则表达式应该匹配整个字符串。如果是这样,你可以试试这个

"^(?:(?=.{6,})(?=.*\\d)|(?=.*\\W)).*$" 

看看会发生什么。

尝试^$在空字符串上使用,然后在有长度的字符串上尝试。

于 2012-04-24T18:08:14.370 回答