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

在字符串中查找电子邮件地址-ColdFusion 9,coldfusion,coldfusion-9,Coldfusion,Coldfusion 9,我想知道coldfusion是否有一个内置函数来查找字符串中的电子邮件地址 我正试图通读一个查询输出,例如“John Smith”jsmith@example.com“并且只发送电子邮件 我以前做过类似的事情,我数一数字符串的空格,在第二个字符串之后,我擦去左边的所有字符,它只保留电子邮件地址 虽然这在我的情况下可以工作,但它并不安全,几乎可以保证可能以不同格式(如“John”)出现的错误和数据滥用jsmith@example.com“在这种情况下,我将擦除所有信息。您可以使用Ray Camde

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

我正试图通读一个查询输出,例如“John Smith”jsmith@example.com“并且只发送电子邮件

我以前做过类似的事情,我数一数字符串的空格,在第二个字符串之后,我擦去左边的所有字符,它只保留电子邮件地址

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

您可以使用Ray Camden提供的信息。它对我很有用

<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>

/**
*在字符串中搜索电子邮件地址。
*基于Gerardo Rojas的想法和Jeff Guillaume的isEmail UDF。
*新TLD
*Jorge Asch的v3修复
* 
*@param str要搜索的字符串。(必选)
*@return返回一个列表。
*@作者雷蒙德·卡姆登
*@版本3,2011年6月13日
*/
函数getEmails(str){
var email=“([[U a-z0-9-]+(\.[U a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*。((航空合作社信息博物馆名称工作旅行)([a-z]{2,3])”;
var res=“”;
var标记=1;
var匹配=”;
匹配=reFindNoCase(电子邮件、str、marker、marker);
while(匹配.len[1]gt 0){
res=listpappend(res,mid(str,matches.pos[1],matches.len[1]);
marker=matches.pos[1]+matches.len[1];
匹配=reFindNoCase(电子邮件、str、marker、marker);
}
返回res;
}

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


使用
REMatchNoCase()
和一个好的电子邮件regex注意,这使用了特定的TLD列表方法,因为TLD列表现在处于不断变化之中,所以使用字符计数方法是最安全的。
<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#">