密码验证正则表达式:要求和禁止某些字符



>我有一个带有jQuery验证和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 @#$%")

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

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

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

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

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

请参阅此处的示例。

相关内容

  • 没有找到相关文章

最新更新