2010-12-10 184 views
11

試圖驗證逗號分隔的電子郵件列表在文本框中與asp:RegularExpressionValidator,見下圖:如何用逗號分隔逗號分隔的電子郵件列表?

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" 
        runat="server" ErrorMessage="Wrong email format (separate multiple email by comma [,])" ControlToValidate="txtEscalationEmail" 
        Display="Dynamic" ValidationExpression="([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)" ValidationGroup="vgEscalation"></asp:RegularExpressionValidator> 

它工作時,我在http://regexhero.net/tester/測試它就好了,但它並沒有我的網頁上工作。

這裏是我的樣品輸入:

[email protected],[email protected] 

我試過建議在this post,但無法得到它的工作。

p.s.我不希望在適當的電子郵件驗證

+0

你能展示添加正則表達式到驗證器的代碼嗎? – 2010-12-10 19:55:55

+0

正則表達式英雄會返回兩個匹配您的原始正則表達式。甜甜圈的解決方案只給出一個匹配(應該如此)。我想這意味着RegularExpressionValidator在匹配匹配方面有一些獨特的匹配行爲。也許兩場並排比賽並不能證明比賽是正確的。不應該很難弄清楚。 – 2010-12-10 20:39:01

回答

14

討論試試這個:

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)+$ 

添加括號後的+表示前面的組可以出現1次或更多次。

添加^$意味着字符串的開頭和匹配的開始(或匹配的結束和字符串的結尾)之間的任何內容都會導致驗證失敗。

+0

簡單的錢,謝謝! – 2010-12-10 19:58:36

+0

順便說一句,你知道它爲什麼沒有「+」在線驗證器的作品? – 2010-12-10 19:59:42

+0

@roman m沒問題,雖然我不確定爲什麼在線驗證器和原始代碼之間存在差異。很高興這有幫助。 – Donut 2010-12-10 20:04:16

16

這個正則表達式將允許逗號後有空格的郵件。

^[\W]*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4}[\W]*,{1}[\W]*)*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4})[\W]*$ 

玩了這個,一個同事想出了這個更準確的RegEx。上面的答案似乎讓一個電子郵件地址列表的第一個元素不是電子郵件地址。這是更新,也允許逗號後的空格。

+0

這個正則表達式接受一個「。」或空間和最後的任何特殊字符。例如:「[email protected]」。 – 2015-02-11 16:17:50

+1

這不允許'matt @ about.museum'。 – 2015-03-11 17:37:38

+5

要允許長域擴展,請使用'^ [\ W] *([\ w + \ - 。%] + @ [\ w \ - 。] + \。[A-Za-z] + [\ W] * ,{1} [\ W] *)*([\ w + \ - 。%] + @ [\ w \ - 。] + \。[A-Za-z] +)[\ W] * $'只需將{2,4}限制替換爲+ – 2015-05-26 15:23:50

0

下面的正則表達式限制較少,更適合驗證手動輸入的以逗號分隔的電子郵件地址列表。它允許相鄰的逗號。

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$ 
0

使用以下正則表達式,它將解決您的問題。下面的正則表達式將娛樂預繳空間用逗號太

/^((([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z\s?]{2,5}){1,25})(\s?,\s*?))$/ 
+0

這將匹配,即'-.-。-。-... @ .......,'我不確定它是否是一個有效的電子郵件地址 – Toto 2013-12-17 12:32:41

1
^([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+,*[\W]*)+$ 

這也將正常工作。這對電子郵件來說有點嚴格,並且不會有多個電子郵件地址輸入或者逗號出現。

+0

它需要,並且;在電子郵件之間。我只需要它,而不是; – Na30m 2017-04-13 14:12:08

+0

我該如何改變這一點? – Na30m 2017-04-13 14:12:16

0

我對派對有點遲,我知道,但我覺得我會加兩分錢,因爲接受的答案有電子郵件地址彼此相鄰而沒有逗號的問題。

我建議正則表達式是這樣的:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}(,[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,})*$

它類似於接受的答案,但我解決了在談論這個問題。我提出的解決方案不是搜索「一個電子郵件地址後跟一個可選的逗號」一次或多次,這就是接受的答案所做的,這個正則表達式搜索「一個電子郵件地址,後跟一個可選的逗號前綴電子郵件地址任何次數「。

解決了問題,將逗號與郵件地址分組,然後使整個組成爲可選,而不是逗號。

注: 此正則表達式是爲了啓用了敏感標誌一起使用。
你可以使用任何一個正則表達式匹配你喜歡的郵箱地址,我只是使用了我已經使用過的郵箱地址。你只需用你想使用的任何一個正則表達式替換每個[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}

0

被選爲最佳的第一個答案匹配字符串,如[email protected]@abc.com,這是無效的。

以下正則表達式可用於以逗號分隔的電子郵件ID很棒。

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4})(,[\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4})*$ 

它將匹配單EMAILID,逗號分隔EMAILID但如果逗號錯過。

第一組將匹配單個emailId的字符串。第二組可選地由'*'令牌需要,即0或更多數量的這樣的組,但','需要位於這樣的emailId的開始處,這使逗號分隔emailId以匹配上面的正則表達式。