2010-01-12 83 views
5

嗨我試圖搜索一個字符串,看看它是否包含一個電子郵件地址 - 然後返回它。PHP搜索字符串的電子郵件地址

的典型電子郵件vaildator表達式爲:

eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email); 

但是我如何搜索,如果這是一個字符串,例如返回字符串中的電子郵件地址:

「嗨,我的名字是喬,我可以通過[email protected]聯繫我,我也在Twitter上。「

我有點難倒了,我知道,如果B爲中心,但我怎麼回什麼是發現它的存在與\在所有我可以搜索。

謝謝。

+1

順便說一下,該表達式不正確。 – 2010-01-12 17:14:39

+1

首先打在「電子郵件地址正則表達式」:http://www.regular-expressions.info/email.html – 2010-01-12 17:26:29

+0

可能重複[在PHP中,我如何從一個文本塊中提取多個電子郵件地址,並把他們到一個數組?](http://stackoverflow.com/questions/3901070/in-php-how-do-i-extract-multiple-e-mail-addresses-from-a-block-of-text-and -put) – 2014-08-04 12:00:30

回答

4

加$暫存器作爲最後一個參數:

eregi("...", $email, $regs); 
+0

非常好,謝謝! – joobaal 2010-01-12 17:21:31

+3

Joobool,如果你發現這個答案有幫助,接受它。 – Sampson 2010-01-12 17:26:17

+0

請注意,'eregi'現在已經很長一段時間了。喬納森桑普森的答案更好! – 2014-03-10 10:38:09

9

您可以使用preg_match(),它會將其輸出到數組中供使用。

$content = "Hi my name is Joe, I can be contacted at [email protected] I am also on Twitter."; 
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $content, $matches); 

print $matches[0]; // [email protected] 
+1

請注意,在這種情況下,您需要從模式的開頭和結尾中刪除^和$ - ^表示匹配字符串的開頭,$匹配字符串的結尾,所以它除非電子郵件是整個字符串,否則不會找到「匹配」。要搜索包含的電子郵件地址,您需要更改: 「^ [_ a-z0-9 - ] +(\。[_ a-z0-9 - ] +)* @ [a-z0-9 - ] +( \。[a-z0-9 - ] +)*(\。[az] {2,3})$「to」[_a-z0-9 - ] +(\。[_ a-z0-9 - ] + )* @ [a-z0-9 - ] +(\。[a-z0-9 - ] +)*(\。[az] {2,3})「 – Nicole 2010-01-12 17:15:14

+0

我決定繼續使用eregi,謝謝指針Renesis。 – joobaal 2010-01-12 17:22:12

+0

哦,謝謝您也幫助喬納森! – joobaal 2010-01-12 17:22:46

0

更好PCRE用於提取ADDR_SPEC是:

/[a-z0-9\._%+!$&*=^|~#%'`?{}/\-][email protected]([a-z0-9\-]+\.){1,}([a-z]{2,6})/ 

但如果你真的想解壓縮的RFC 2822,那麼你需要類似於:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/ 

C.

相關問題