2013-10-30 367 views
5

我創建了一個正則表達式驗證電子郵件地址,這是我的正則表達式:限制最大長度與正則表達式+ C#

@"^\w+(\.?[-+\w])*@\w+([-.]\w+)*\.[a-zA-Z]{2,80}$" 

我想的是,郵件地址的最大長度爲80個,但與此正則表達式我只限制之後的最後一部分郵件。

現在

[email protected]fffffffffffffffffffffffffffffffff is invalid 

aaaaaaaaaaaaaaaaaaaa[email protected]aa.ffffffff is valid 

我怎樣才能做到這一點?

+3

你不能,正則表達式不是正確的工具。那麼string.Length呢? – Peter

+1

此驗證是一個兩步驟過程。驗證格式和驗證長度的格式。對於長度,您可以使用正則表達式,但是有更好的方法,正如@peer所建議的。 –

+0

爲什麼不分割它們並比較每個字符串的長度? – User2012384

回答

0

你可以檢查sthe String.Lenght屬性來驗證。如果你想檢查「@」字符前後的部分,你可以做一個字符串。分割字符@,並檢查操作產生的兩個字符串的長度。

1

你可以在兩個步驟內驗證。試試看。

Regex validCharsRegex = new Regex(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*" + 
                 "@" + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"); 
    Match match = validCharsRegex.Match(stringText.Trim()); 
    if (match.Success && stringText.Length <=80) 
    { 
    // You logic here 
    } 
1

不知道如果我犯了一個明顯的錯誤,但我做了一個conditional expression測試與沒有條款。測試條件是電子郵件格式驗證:

(?:^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$) 

如果條件被滿足,查詢的輸入6(最小長度 - [email protected])之間的任何字符和80次重複:

^.{6,80}$ 

如果條件不滿足,在測試條件下的表達重新搜索(其不產生任何結果):

^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$ 

的誰樂正則表達式如下:

(?(?:^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$)^.{6,80}$|^\w+\.?[-+\w]*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,}$) 

似乎它的工作。