2012-01-18 62 views
1

我正在瀏覽我們的舊網站文件和擁有我們的成員電子郵件和通信10年的數據。PHP - preg_match_all - 寬鬆的電子郵件匹配模式,允許空格和雙倍@

我正在提取所有的電子郵件地址(和僵化的電子郵件條目),並將它們添加到我們的新網站數據庫。

這是一個初學者嘗試cms,沒有錯誤檢查和驗證。

所以,我在使用空格和double @匹配電子郵件時遇到了麻煩。

果醬@水療ces1.com

果醬@ SPAC es2.com

果醬@@ doubleats.org

我已經建造這種鬆散的正則表達式是有意允許一大堆不正確的電子郵件格式,但是,上述三個例子是我無法弄清楚的。

這是我目前的「工作」代碼:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)'; 
$pattern2='\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b'; 
$pattern="/$pattern1|$pattern2/i"; 
$isago = preg_match_all($pattern,$text,$matches); 
    if ($isago) {....... 

我需要另一種模式,將允許三個電子郵件上面的例子被識別爲電子郵件地址。 (實際驗證後來)

此外,是否有任何其他模式,我可以使用,這將允許我識別文件中可能的電子郵件?

感謝您的任何幫助。

回答

1

對於第三種情況,您可以將@更改爲@{1,2}。 對於第一和第二,你可以在你的正則表達式pattern1加上一個空格:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@{1,2}([ ]+|)([ a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)'; 
$pattern2='\b[A-Z0-9._%+-][email protected]{1,2}[A-Z0-9.-]+\.[A-Z]{2,4}\b'; 
+0

謝謝。我嘗試了一個非常類似的變化,但是,你教了我一些東西。謝謝! – 2012-01-18 13:20:18

0

這個答案是像我認識的一個玩笑......但是,這個怎麼樣的正則表達式:

/[\S ][email protected][\S ]+\.[\S ]+/i

這對你有用?我在文檔中測試它並匹配三封郵件。

+0

這將接受不是有效電子郵件字符的字符(除空格外),甚至接受「@」 – Umbrella 2012-01-18 04:23:12

0

對於一般用途的,你應該使用這樣的事情:

/[A-Za-z0-9\._][email protected][A-Za-z0-9\._]+\.[A-Za-z0-9\._]+/i 

有了,你會匹配所有的電子郵件,即使是換行或逗號分隔。