2012-12-21 120 views
2

我在想,如果coldfusion有一個內置函數來查找字符串中的電子郵件地址。查找字符串中的電子郵件地址 - ColdFusion 9

我想通讀查詢輸出例如。 「約翰史密斯[email protected]」並且只拿出電子郵件。

我在過去做過類似這樣的事情,我在計算字符串的空格,在第二個字符串之後,我清除了保留電子郵件地址的所有字符。

雖然這可以在我的情況下工作,但它並不安全,幾乎可以保證錯誤和濫用可能以不同格式出現的數據,例如「John [email protected]」,在這種情況下,我將擦除它所有的信息。

+0

使用'REMatchNoCase()'和良好的電子郵件正則表達式 – Henry

回答

11

正則表達式可能是最簡單的方法。電子郵件的最終正則表達式非常大。這應該涵蓋大多數有效的電子郵件。例如,這不包括unicode。請注意,最大TLD長度爲63(請參閱this SO question & answer)。

<cfset string="some [email protected] [email protected] [email protected] [email protected] whatever [email protected] oh my!"> 

<cfset results = reMatchNoCase("[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,63}", string)> 

<cfdump var="#results#"> 
+0

不能比這更好!謝謝 – Geo

1

您可以使用Ray Camden的UDF from cflib.org。它對我很好用

<cfscript> 
/** 
* Searches a string for email addresses. 
* Based on the idea by Gerardo Rojas and the isEmail UDF by Jeff Guillaume. 
    * New TLDs 
    * v3 fix by Jorge Asch 
        * 
* @param str String to search. (Required) 
* @return Returns a list. 
* @author Raymond Camden 
* @version 3, June 13, 2011 
*/ 
function getEmails(str) { 
    var email = "(['_a-z0-9-]+(\.['_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\. ((aero|coop|info|museum|name|jobs|travel)|([a-z]{2,3})))"; 
var res = ""; 
var marker = 1; 
var matches = ""; 

matches = reFindNoCase(email,str,marker,marker); 

while(matches.len[1] gt 0) { 
    res = listAppend(res,mid(str,matches.pos[1],matches.len[1])); 
    marker = matches.pos[1] + matches.len[1]; 
    matches = reFindNoCase(email,str,marker,marker);   
} 
return res; 
} 
</cfscript> 
+1

注意,這裏使用了特定的TLD名單的做法,這是自該TLD列表是在不斷的變化,現在,它的最安全的移動到字符數的方法。 – BKK

相關問題