2011-11-03 336 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:,但我絕不是一個正規表達專家。我建議你將正則表達式減半,直到錯誤消失,以便縮小它的範圍。