【发布时间】:2011-03-27 10:10:12
【问题描述】:
我正在使用 Ryan J. Heldt http://validation.riaforge.org/ 的出色验证 CFC
但电子邮件验证 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 的了解不足以提出解决方案,尽管我已将此通知 Ryan(以及一年前的另一个错误),但他似乎并未处于错误修复模式。
谁能推荐一个替代的正则表达式?
【问题讨论】:
-
有趣,
isValid("email", xxx)似乎不符合 RFC。至少是 Railo 的实现。 -
在regular-expressions.info/email.html 上有一篇关于各种电子邮件验证 RE 的好文章,讨论了为什么 RFC 仿真可能不是一个好主意。
标签: validation coldfusion email-validation