2

RyanJ.Heldtによる優れた検証CFCを使用していますhttp://validation.riaforge.org/

しかし、電子メール検証REに問題があります。RFC 5322では、次の文字を使用できます

! # $ % & ' * + - / = ? ^ _ ` { | } ~

ただし、validate.cfcのREは、アポストロフィのためにJohnO'Connell@somewhere.comを拒否します。

問題のREは次のコードブロックにあります

<cffunction name="validateEmail" returntype="void" access="private" output="false">
    <cfargument name="parameters" type="string" required="true" />
    <cfset var rr = 0 />
    <cfloop index="rr" list="#arguments.parameters#" delimiters=";">
        <cfif isDefined("#listGetAt(rr,1,"|")#") and len(_fields[listGetAt(rr,1,"|")]) and not reFind("^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$",_fields[listGetAt(rr,1,"|")])>
            <cfset registerError(listGetAt(rr,1,"|"),listGetAt(rr,2,"|")) />
        </cfif>
    </cfloop>
    <cfreturn />
</cffunction>

私のREに関する知識は、解決策を提案することにはなりません。ライアンにこれ(および1年前の別のバグ)について通知しましたが、彼はバグ修正モードになっていないようです。

誰かが別の正規表現を提案できますか?

4

3 に答える 3

1

名前にこれらの特殊文字を許可するように正規表現を更新することに挑戦しますが、一般的な経験則として、私は電子メールアドレスの検証が非常に緩いです。仕様に従って誰もそれらを実装していないように見えるからです。私の検証は通常、次のもので構成されます。

  • '@'を含む
  • '@'の前に1文字以上含まれています
  • '@'の後に3文字以上含まれています
  • '@'の後の1文字以上は'。'でなければなりません。

これにより、多くの誤検知が発生する可能性がありますが、誤検知が発生することもありません。

仕様に正確に一致するほど複雑ではないため、その正規表現を仕様に更新しようとはしません。名前に特殊文字を使用できるようにするだけの場合は、次を使用します。

and not reFind("^[a-zA-Z][\w\.\##\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
于 2010-08-09T17:15:54.790 に答える
1

これは、メールの私の典型的な正規表現です。

^['_a-zA-Z0-9-\+~]+(\.['_a-zA-Z0-9-\+~]+)*@([a-zA-Z_0-9-]+\.)+(([a-zA-Z]{2})|(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel))$
于 2010-08-09T17:33:11.207 に答える
0

どのバージョンのCFを使用していますか?CF8以降、IsValid()を使用して電子メールをチェックできます。

<cfset myemail = "me@exampl.ecom">
<cfoutput>#IsValid("email", myemail)#</cfoutput>
于 2010-08-09T17:47:03.263 に答える