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

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

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

正如所料,这会产生一个html元素

  

这是一个有效的JavaScript Regex,但密码永远不会匹配。 这是JQueryvalidation器的限制吗?

谢谢

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

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

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

看看会发生什么。

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

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

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

或者在你的字符串中:

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

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

在这里试验它 。

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

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

虽然有单个正则表达式可以达到我想要的效果,但我可以通过将其分解为3个validation来获得更好的用户体验,以便用户获得有关所需内容的特定消息。 例如

 [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")]