2011-07-29 37 views
3

我需要驗證可以是單個或多個逗號分隔的郵件地址。正則表達式來驗證逗號分隔的電子郵件地址?

我用正則表達式驗證之前的表達式,如:

string exp = @"((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*"; 

並且它驗證多個或一個單一的電子郵件地址。

但同樣的表情是不是在C#valdiating?它對有效地址也是有效的。

請指正或建議我驗證電子郵件addresse(S)的表達式。

回答

15

請提供更多的細節。哪些地址被認定爲有效,但應該是無效的?你如何調用正則表達式(你的C#代碼)?

的問題,我看到的是,你缺少的錨。

^((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*$ 

^匹配字符串

$開始串

結束比賽如果你不使用它們的圖案會盡快它找到了一個有效的子字符串相匹配。

+0

謝謝你。我在str.match(/ ^((\ w +([ - +。'] \ w +)* @ \ w +([ - 。] \ w +)* \。\ w +([ - 。] \ w +) *)*([,])*)* $/gi)!= null); _ _ _ _沒有編輯器可以爲此做出正確的語法突出顯示,但它是正確的。適用於Chrome和FF。 –

4

我不知道C#我可以','驗證每個分隔符 .....其簡單

+0

這是正確的方法。 – Amicable

4

不知道你是如何做的驗證,這是很難說爲什麼C#出主意 分裂正在驗證驗證器已拒絕的一些字符串。很可能是因爲驗證器正在查看整個字符串,並且您在C#中使用Regex.IsMatch(),如果substring匹配,它也會接受匹配。要解決該問題,請將\A添加到開始位置,並將\Z添加到正則表達式的末尾。在你的情況下,整個正則表達式是可選的(由(...)*包含),所以它也匹配空字符串 - 你想允許嗎?

話又說回來,你可能要重新考慮整個正則表達式的方法 - 不理智的正則表達式可以正確地驗證電子郵件地址(你還是會通過,只是有效的,但沒有實際帳戶關聯的地址跟他們)。

1

試試這個〜

try { 
    Regex regexObj = new Regex(@"([A-Z0-9._%+-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,6},?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline); 
    if (regexObj.IsMatch(subjectString)) { 
     // Successful match 
    } else { 
     // Match attempt failed 
    } 
} catch (ArgumentException ex) { 
    // Syntax error in the regular expression 
} 
1

試試這個,

private bool IsValidMultipleEmail1(string value) 
    { 
     Regex _Regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 

     string[] _emails = value.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries); 

     foreach (string email in _emails) 
     { 
      if (!_Regex.IsMatch(email)) 
       return false; 
     } 

     return true; 
    } 
0

使用下面的正則表達式,它能夠解決您的問題。以下正則表達式將使用逗號來招待帖子和預處理空間

/(((([αzA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+)。 ([A-ZA-Z \ S?] {2,5-}){1,25})(\ S?,\ S *?) $/

相關問題