Jquery Unobstrustive 和 MVC 5 - RegEx 在 jquery unobstrustive 中从未满足

Jquery Unobstrustive and MVC 5 - RegEx never satisfied in jquery unobstrustive

提问人:Abraham Lincoln 提问时间:3/26/2016 最后编辑:tereškoAbraham Lincoln 更新时间:3/26/2016 访问量:115

问:

我正在编写一个 MVC 应用程序,并且需要强密码。很简单,我设置了一个具有以下属性的视图模型。

    [Required]
    [RegularExpression(@"(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,", ErrorMessage ="1 upper, 1 lower, 1 digit, 8 character minimum length")]
    public string PasswordEntered { get; set }

当我使用服务器验证时,这很好用:只要我输入一个下限和上限、一个数字和总共 8 个字符,我的模型就是有效的。

一旦我打开了 jquery 不显眼的验证,我的所有其他字段都会在没有往返的情况下进行验证,但即使我输入了像 Password123 这样的有效密码,密码也会顽固地给我错误消息。

为什么正则表达式不起作用?如何更正此问题?

编辑: 进一步研究。在调试和单步执行jquery代码时,我看到了这一点

return (match && (match.index === 0) && (match[0].length === value.length));

因此,由于我的正则表达式确实返回了任何匹配组,因此jquery认为正则表达式已失败。我不确定如何获得匹配组来满足jquery...

jquery 正则表达式 asp.net-mvc unobtrusive-javascript

评论

0赞 Abraham Lincoln 3/26/2016
我认为问题出在我的正则表达式中,即使它在 jquery 验证之前就可以工作了......现在研究一下。
0赞 Abraham Lincoln 3/26/2016
我简化了我的正则表达式,并使用 regex101.com 来验证我的正则表达式“(?=.*\d)(?=.*[a-z])(?=.*[A-Z])” - 请注意,这消除了长度要求。仍然没有使用 jquery 进行验证。
0赞 Abraham Lincoln 3/26/2016
似乎因为正则表达式没有给出匹配组,所以jquery无法将结果识别为有效。请参阅上面的编辑。

答:

1赞 Abraham Lincoln 3/26/2016 #1

经过 2 个多小时的 RegEx 速成课程并浏览了 jquery 代码,我发现 jquery 要求匹配组的长度与正在测试的输入相同。由于我的原始正则表达式不包含匹配组,因此 jquery 函数失败。我修改了我原来的正则表达式,它现在可以工作了。

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.{8,}$)

评论

0赞 Dan 2/28/2017
对于其他任何坚持不显眼的密码验证(可能),这是您需要的正则表达式,以满足长度要求才能正常工作。我尝试了其他几个有效的正则表达式(在测试器中),但这是唯一一个在运行时实际有效的正则表达式