在字符串中查找电子邮件地址 - ColdFusion 9

时间:2012-12-21 23:06:01

标签: coldfusion coldfusion-9

我想知道coldfusion是否有内置函数来查找字符串中的电子邮件地址。

我正在尝试通读查询输出ex。 “约翰史密斯jsmith@example.com”,只拿出电子邮件。

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

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

2 个答案:

答案 0 :(得分:12)

正则表达式可能是最简单的方法。有一个非常大的电子邮件的终极正则表达式。这应该涵盖大多数有效的电子邮件。例如,这不包括unicode。请注意,最大TLD长度为63(请参阅this 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#">

答案 1 :(得分: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>