【问题标题】:MVC3 Regular Expression Validator - "Syntax Error In Regular Expression"MVC3 正则表达式验证器 - “正则表达式中的语法错误”
【发布时间】:2011-11-03 21:53:37
【问题描述】:

我正在尝试向 ViewModel 中的属性添加“RegularExpression”属性

[RegularExpression(@"^(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[a-z])(?=.*[A-Z])(?i-msnx:(?!.*pass|.*password|.*word|.*god|.*\s))(?!^.*\n)^((.))+$.*$", ErrorMessage = "Password does not meet requirements.")]
public string NewPassword { get; set; }

验证发生时,我从 Visual Studio 收到以下异常:

Microsoft JScript runtime error: Syntax error in regular expression

这与我在定义 Membership 提供程序时在 web.config 中定义的正则表达式完全相同:

passwordStrengthRegularExpression="^(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[a-z])(?=.*[A-Z])(?i-msnx:(?!.*pass|.*password|.*word|.*god|.*\s))(?!^.*\n)^((.))+$.*$"

谁能告诉我为什么在 Model 属性中使用正则表达式时出现此错误?

【问题讨论】:

  • god 有什么问题?

标签: jquery regex asp.net-mvc-3 model-view-controller validation


【解决方案1】:

JScript 是 Microsoft 的 ECMAScript 版本,与 .NET 相比,它支持的正则表达式功能非常有限。你最大的问题是它不支持像(?i:xyz) 这样的内联修饰符。似乎也没有办法单独传递修饰符,就像直接使用 C# 或 JScript 一样。如果您想不区分大小写地排除某些内容,那您就搞砸了。

还要注意,像 \d 和 \W 这样的字符类简写在服务器 (.NET) 上的含义与在客户端 (JScript) 上的含义不同。如果您希望正则表达式在双方都相同,您可能需要更具体。下面是一个示例,为清楚起见进行了细分:

^
(?=\S{8,}$)           # eight or more non-whitespace characters
(?=.*[0-9])           # at least one digit
(?=.*[a-z])           # at least one lowercase letter
(?=.*[A-Z])           # at least one uppercase letter
(?=.*[^A-Za-z0-9])    # at least one non-letter, non-digit
(?!.*(?:pass|word|god|PASS|WORD|GOD))
.+$

如您所见,我只排除了pass、word 等的全小写或全大写版本,这并不令人满意。如果您确实需要排除或要求不区分大小写的整个单词,您可能必须使用不同类型的验证器。

【讨论】:

    【解决方案2】:

    我认为您看到的问题是 Javascript 不支持正则表达式的一部分。我对i-msnx: 持怀疑态度,但我绝不是正则表达式专家。我建议您将正则表达式减半,直到错误消失,以便缩小范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多