2015-04-23 20 views

回答

5

RegularExpressionAttribute需要字符串的完全匹配。

在你的情況下,你只匹配從@字符開始,所以你開始在你的字符串之間的某個地方。這對於RegularExpressionAttribute來說不夠好。你可以想象它在表達式的開頭添加了一個隱含的^(最後也隱含了$,所以你也可以刪除它)。

所以要解決這個問題,你需要確保它在開始時有一些東西匹配,例如a .*?

new RegularExpressionAttribute(@".*[email protected](?!.*?\.\.)[^@]+"); 

然後它工作。您不需要任何其他正則表達式標誌。


不幸的是,在文檔中沒有提到RegularExpressionAttribute的這種行爲。您可以在不過reference source驗證:

// We are looking for an exact match, not just a search hit. This matches what 
// the RegularExpressionValidator control does 
return (m.Success && m.Index == 0 && m.Length == stringValue.Length); 

所以它在技術上不是添加^$但找到一個匹配後,開始和結束索引必須匹配字符串的開始和結束指數(基本上是一樣的東西)。

如果你仔細想想,這種行爲對驗證有很大的意義。畢竟,你想確保一個字符串匹配某個完整指定的格式,而不僅僅是檢查一些子字符串是否有效。

+0

謝謝....是的,這確實工作....不知道爲什麼它被投票..這是解決方案 – kurasa

+0

也可能放棄尾隨'$'太多。 – Rawling

+0

請問您可以從https://msdn.microsoft.com/zh-CN/library/system.componentmodel.dataannotations.regularexpressionattribute.aspx提供報價,其中聲明需要完整匹配? –

相關問題