我想知道coldfusion是否有内置函数来查找字符串中的电子邮件地址。
我正在尝试通读查询输出ex。 “约翰史密斯jsmith@example.com”,只拿出电子邮件。
我过去做了类似这样的事情,我在计算字符串的空格,在第二个字符串之后,我擦除了左边的所有字符,它保留了电子邮件地址。
虽然这可以在我的情况下工作,但它并不安全,几乎可以保证错误和误用可能以不同格式出现的数据,例如“John jsmith@example.com”,在这种情况下,我将擦除所有信息。
答案 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>