2011-11-03 119 views
1

我试图验证时,我得到了Visual以下异常属性在视图模型MVC3正则表达式验证 - “语法错误在正则表达式”

[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; } 

添加一个“正则表达式”的属性演播室:

Microsoft JScript runtime error: Syntax error in regular expression 

这是我在web.config中定义的成员资格提供定义时完全相同的正则表达式:

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

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

+1

“god”有什么问题? – NullUserException

回答

4

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

请注意,像服务器(.NET)这样的字符类shorthands,例如\d\W在客户端(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)) 
.+$ 

正如你所看到的,我只是不包括全部小写或全部大写的password等版本,这是不是真的满意。如果您确实需要不区分大小写或排除整个单词,则可能需要使用其他种类的验证程序。

1

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