3

我想知道 Coldfusion 是否具有在字符串中查找电子邮件地址的内置功能。

我正在尝试通读查询输出前。“John Smith jsmith@example.com”并只发送电子邮件。

我过去做过类似的事情,我在计算字符串的空格,在第二个字符串之后,我清除了左侧的所有字符,它只保留了电子邮件地址。

尽管这可以在我的情况下工作,但它并不安全,并且几乎可以保证错误和滥用可能以不同格式出现的数据,例如“John jsmith@example.com”,在这种情况下,我将清除所有信息。

4

2 回答 2

13

正则表达式可能是最简单的方法。电子邮件有一个非常大的终极正则表达式。这应该涵盖大多数有效的电子邮件。例如,这不包括 unicode。请注意,最大 TLD 长度为 63(请参阅此 SO question & answer)。

<cfset string="some garbae@.ca garbage@ca.a real@email.com another@garbage whatever another@email.com oh my!">

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

<cfdump var="#results#">
于 2012-12-21T23:35:17.583 回答
1

您可以使用Ray Camden的 cflib.org 中的这个 UDF 。这对我很有效

<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>
于 2012-12-21T23:27:17.720 回答