基于正则表达式属性的客户端正则表达式验证失败



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

[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验证器的限制吗?

感谢

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

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

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

看看会发生什么。

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

你的陈述由三个积极的、前瞻性的断言组成。积极的、前瞻性的断言不会返回找到的内容,所以我认为当什么都没有返回时,你不能生成真值。这样的东西会产生你需要的东西吗?

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

或者在你的字符串中:

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

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

在这里进行实验。

有效的正则表达式并不意味着它将匹配您期望匹配的内容。你希望匹配的到底是什么?

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

尽管有单个正则表达式可以执行我想要的操作,但我可以通过将其分解为 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")]

最新更新