提问人:Abraham Lincoln 提问时间:3/26/2016 最后编辑:tereškoAbraham Lincoln 更新时间:3/26/2016 访问量:115
Jquery Unobstrustive 和 MVC 5 - RegEx 在 jquery unobstrustive 中从未满足
Jquery Unobstrustive and MVC 5 - RegEx never satisfied in jquery unobstrustive
问:
我正在编写一个 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...
答:
1赞
Abraham Lincoln
3/26/2016
#1
经过 2 个多小时的 RegEx 速成课程并浏览了 jquery 代码,我发现 jquery 要求匹配组的长度与正在测试的输入相同。由于我的原始正则表达式不包含匹配组,因此 jquery 函数失败。我修改了我原来的正则表达式,它现在可以工作了。
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(.{8,}$)
评论
0赞
Dan
2/28/2017
对于其他任何坚持不显眼的密码验证(可能),这是您需要的正则表达式,以满足长度要求才能正常工作。我尝试了其他几个有效的正则表达式(在测试器中),但这是唯一一个在运行时实际有效的正则表达式
评论