以下demo作品就好了網上,但不是當我試圖在C#中運行它/。NET正則表達式的作品,但不是在.NET
var regex = new RegularExpressionAttribute(@"@(?!.*?\.\.)[^@]+$");
Assert.IsTrue(regex.IsValid("[email protected]"));
這裏是一個link後,將解釋正則表達式以及我正在嘗試的操作
以下demo作品就好了網上,但不是當我試圖在C#中運行它/。NET正則表達式的作品,但不是在.NET
var regex = new RegularExpressionAttribute(@"@(?!.*?\.\.)[^@]+$");
Assert.IsTrue(regex.IsValid("[email protected]"));
這裏是一個link後,將解釋正則表達式以及我正在嘗試的操作
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);
所以它在技術上不是添加^
和$
但找到一個匹配後,開始和結束索引必須匹配字符串的開始和結束指數(基本上是一樣的東西)。
如果你仔細想想,這種行爲對驗證有很大的意義。畢竟,你想確保一個字符串匹配某個完整指定的格式,而不僅僅是檢查一些子字符串是否有效。
你想達到什麼目的?驗證電子郵件? – Rezoan