3

ColdFusionには、文字列内のメールアドレスを検索する機能が組み込まれているのではないかと思いました。

クエリ出力を読み通そうとしています。「JohnSmithjsmith@example.com」とメールのみを送信します。

私は過去にこのようなことをしました。文字列のスペースを数え、2番目の文字列の後で、メールアドレスだけを保持している左側のすべての文字を消去していました。

これは私の状況では機能しますが、安全ではなく、「John jsmith@example.com」などの別の形式で送信される可能性のあるデータのバグや誤用をほぼ保証します。この場合、すべての情報を消去します。

4

2 に答える 2

13

正規表現はおそらく最も簡単な方法です。非常に大きな電子メールには、究極の正規表現があります。これは、最も有効な電子メールをカバーする必要があります。たとえば、これはユニコードをカバーしていません。TLDの最大長は63であることに注意してください(このSOの質問と回答を参照してください)。

<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

このUDFは、RayCamdenの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>
于 2012-12-21T23:27:17.720 に答える