2011-11-21 25 views

回答

17

你表達正常工作:rubular

的問題是在你的正則表達式的報價意味着它被解釋爲純文本字符串,而不是一個正則表達式。刪除引號解決了這個問題:ideone

@from = "John Doe <[email protected]>" 
@from.scan(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i) { |x| puts x } 

輸出:

 
[email protected] 
+1

正則表達式/的定義之間,所以如果你把裏面的字符串引用紅寶石不會使它一個正則表達式,而是會只認準純文本。 –

6

對不起,我沒有足夠的代表處發表評論,所以我會做這樣一個答案:

對於任何將來的使用,每個人都應該做一個修改:不要限制TLD長度4.新頂級域名正在推出非常迅速,現在您應該使用這樣的正則表達式:

@from.scan(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}\b/i) 

我所做的只是去掉4在正則表達式,這使在TLD的4個字符的最大長度結束。 TLD幾乎都是2,3或4個字符(.com,.org,.info等)。但現在,他們正在推出大量的新產品(.auction,.software,.business等)。

所以沒有人應該限制TLD的長度了(儘管留下最少2個字符仍然很好)。

9

對於那些誰只需要對付像地址"John Doe <[email protected]>",其中可能包含的顯示名稱。

使用Ruby的Mail::Address類。

require 'mail' 
#=> true 
a = Mail::Address.new("John Doe <[email protected]>") 
#=> #<Mail::Address:70264542184500 Address: |John Doe <[email protected]>| > 
a.address 
#=> "[email protected]" 
a.display_name 
#=> "John Doe" 
+1

我最近一直在使用它,但是偶然發現了一個UTF8字符似乎不受支持的bug:https://github.com/mikel/mail/issues/1014 ... – Nick

相關問題