我想知道 Coldfusion 是否具有在字符串中查找电子邮件地址的内置功能。
我正在尝试通读查询输出前。“John Smith jsmith@example.com”并只发送电子邮件。
我过去做过类似的事情,我在计算字符串的空格,在第二个字符串之后,我清除了左侧的所有字符,它只保留了电子邮件地址。
尽管这可以在我的情况下工作,但它并不安全,并且几乎可以保证错误和滥用可能以不同格式出现的数据,例如“John jsmith@example.com”,在这种情况下,我将清除所有信息。
我想知道 Coldfusion 是否具有在字符串中查找电子邮件地址的内置功能。
我正在尝试通读查询输出前。“John Smith jsmith@example.com”并只发送电子邮件。
我过去做过类似的事情,我在计算字符串的空格,在第二个字符串之后,我清除了左侧的所有字符,它只保留了电子邮件地址。
尽管这可以在我的情况下工作,但它并不安全,并且几乎可以保证错误和滥用可能以不同格式出现的数据,例如“John jsmith@example.com”,在这种情况下,我将清除所有信息。
正则表达式可能是最简单的方法。电子邮件有一个非常大的终极正则表达式。这应该涵盖大多数有效的电子邮件。例如,这不包括 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#">
您可以使用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>