2013-12-16 50 views
0

分離匹配的郵件我想匹配一個逗號這樣分隔的電子郵件:用逗號在Ruby中

'[email protected], [email protected], [email protected]' 

我想重用在設計創業板定義的正則表達式:

/\A[^@\s][email protected]([^@\s]+\.)+[^@\s]+\z/ 

知道,我不會RFC2822兼容,但我不在乎,因爲我只需要一個非常簡單的電子郵件驗證。

我嘗試匹配用逗號分隔的電子郵件如下:

/\A(([^@\s][email protected]([^@\s]+\.)+[^@\s]+),)*\s([^@\s][email protected]([^@\s]+\.)+[^@\s]+)\z/ 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    everything like '[email protected],' spaces last element '[email protected]' 
    many times 

不幸的是預期,這是行不通的。它是這樣匹配的字符串(注意尾隨逗號):

[email protected], [email protected], [email protected], 

有人可以幫我解決這個問題嗎?

回答

1

您只匹配最後一個逗號後面的空格,將\s移動到正在重複的組。另外,作爲鉑天青提到[^@\s]包括逗號可以通過將其轉變爲[^@\s,]

/\A(([^@\s][email protected]([^@\s]+\.)+[^@\s,]+),\s)*([^@\s][email protected]([^@\s,]+\.)+[^@\s,]+)\z/ 
+0

另外避免這種情況,最終'[^ @ \ S] +'將包括逗號,這解釋了由OP給出的具體示例。 –

+0

謝謝,我不知何故錯過了這部分的問題。 – mechanicalfish

+0

非常感謝你=) – Pol0nium