Jquery 基于正则表达式属性的客户端正则表达式验证失败
在我的模型中,我为简单的密码验证指定了一个正则表达式Jquery 基于正则表达式属性的客户端正则表达式验证失败,jquery,asp.net,regex,asp.net-mvc,jquery-validate,Jquery,Asp.net,Regex,Asp.net Mvc,Jquery Validate,在我的模型中,我为简单的密码验证指定了一个正则表达式 [Required(ErrorMessage="Error")] [RegularExpression("(?=.{6,})(?=.*\\d)|(?=.*\\W)", ErrorMessage= "Error")] public string Password { get; set; } 正如预期的那样,这将生成一个html元素 <input class="textbox-regular" data-val="true" data-v
[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验证程序的限制吗
Thx您的陈述包含三个积极的前瞻性断言。积极的、前瞻性的断言不会返回所发现的内容,所以我认为当没有返回任何内容时,您不可能生成真值。像这样的东西能满足你的需要吗
((?=.*\W)|(?=.*\d)).{6,}
或者在您的字符串中:
"((?=.*\\W)|(?=.*\\d)).{6,}"
在这里,我断言至少有六个,它们必须包含非单词字符或数字。将返回六个或更多字符,因为我没有将其置于积极的前瞻断言中。因为只有当内部的值与这些断言匹配时,才会返回值,所以用户输入应该通过适当的检查
一个有效的正则表达式并不意味着它将匹配您期望它匹配的内容。你到底希望和什么比赛
我的假设是,您希望将至少六个字符与至少一个数字或至少一个非单词字符进行匹配?这令人惊讶,因为它几乎可以匹配所有字符。
验证器是否应该在匹配或失败时显示错误消息 也许正则表达式应该匹配整个字符串。如果是这样,你可以试试这个
"^(?:(?=.{6,})(?=.*\\d)|(?=.*\\W)).*$"
看看会发生什么
尝试在空字符串上使用
^$
,然后在长度为的字符串上使用它。虽然有单个正则表达式可以实现我想要的功能,但我可以通过将其分成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")]
断言本身确实匹配,但不在匹配变量中返回值<代码>^将匹配,但不会返回任何内容。有些实现的api在默认情况下要求整个字符串匹配,有些api只是一个子字符串。@sln;啊。看来我对OP问题的假设是不正确的。我应该删除这个答案,以免混淆其他人吗?这对我来说很有意义,你能在这里找到你的答案吗?一定要提到它或接受下面的答案之一。是的,谢谢你,当我包括^$和(?:)时,它起了作用。我不知道后者做什么。无论如何,我找到了一个更好的解决方案,我也在下面发布。