2013-02-21 21 views
0

我需要在ASP.NET MVC 4中使用數據註釋編寫模型對象驗證。要求是允許所有字母,數字和下面的字符。使用數據註釋正則表達式屬性時的奇怪行爲

@'!&(){}:;,[].+?/- 

所有其他特殊字符應該是驗證錯誤。 我有下面的代碼

[RegularExpression(@"^[a-zA-Z0-9 @'!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
public string Name { get; set; } 

此代碼不拋出驗證異常的字符串「測試名稱|||」

但是,如果我通過去除一個字符(@或 - )修改代碼

[RegularExpression(@"^[a-zA-Z0-9 '!&(){}:;,\[\].+?/-]+", ErrorMessage = NameIsNotValid)] 
    public string Name { get; set; } 

從正則表達式驗證正確發生。我再次添加字符後面,確認沒有引發錯誤

現在我卡住了,不知道該怎麼辦。請指教

+0

'@'在正則表達式沒有特殊的意義,所以它的怪異,但我認爲你需要'$'在表達 – 2013-02-21 05:02:14

+0

結束時,我修改了代碼到[RegularExpression(@「^([a-zA-Z0-9 @'!&(){}:;,\ [\]。+?/ - ] +)$」,ErrorMessage = NameIsNotValid)] ..still沒有運氣 – Srijit 2013-02-21 05:05:08

+0

嘗試轉義@帶有反斜槓 – 2013-02-21 05:05:39

回答

0

我只能在普通的C#測試這一點,我看到兩個問題,你的正則表達式:

  1. 你不使用結束標記$,讓您的驗證應始終是真實的,只要名稱與一個有效的字符開頭。

  2. a-zA-Z只是ASCII字母。我會用Unicode character property\p{L}替換它,它將匹配任何語言的任何字母。

所以,儘量

[RegularExpression(@"^[\p{L}0-9 @'!&(){}:;,\[\].+?/-]+$", ErrorMessage = NameIsNotValid)] 
public string Name { get; set; } 
+0

感謝您的回覆。仍然沒有與您的更改。我也注意到,在正常的C#代碼其工作正常。這僅在數據註釋中失敗。我懷疑.Net數據註釋中的某種bug RegularExpression屬性 – Srijit 2013-02-21 11:23:17

+0

@Sri你有沒有得到任何解決方案?我也爲此找到了答案 – 2017-01-28 16:39:58