1

我有一个带有 jQ​​uery 验证和 System.ComponentModel.DataAnnotations 的 MVC 表单

问题是如果我在密码文本框中输入 & 则 jQuery 和 MVC Model.Isvalid 允许它,即使它不是允许的字符之一。

我试图在谷歌上搜索这个,但我得到的结果与这个问题无关。即JavaScript:客户端与服务器端验证 - 代码日志

我的正则表达式如下,以防我犯了错误。

RegularExpression("^((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,10})", 
  ErrorMessage = "{0} must be between 6 and 10 characters and have at least 1 upper case letter, 1 lower case letter, 1 number and contain either @#$%")
4

1 回答 1

2

您的示例中的模式^((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,10})使用正向前瞻来确保输入字符串中存在某些字符类,但它不会以任何方式阻止其他类型的字符出现。每个前瞻组都以.*它开始,实际上任何因此&或任何其他字符都将在输入字符串中被接受,并且任何前瞻表示的内容都将被强制执行。

换句话说,这种仅使用正向前瞻的方法将使某些类型的字符成为必需,但不会使任何字符成为disallowed

为了克服这个问题,您可以简单地添加另一个前瞻组,但这次是一个否定组:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%])(?!.*[&]).{6,10}$

另外,请注意以字符串终止符结束模式$(您的示例中缺少该模式)。否则,正则表达式引擎将为长度超过 10 个字符的输入生成匹配项。

请参见此处的示例

于 2019-08-19T21:51:58.243 回答