validate.cfc Регулярное выражение справки для электронной почты - PullRequest
2 голосов
/ 09 августа 2010

Я использую отличный CFC для валидации Ryan J. Heldt http://validation.riaforge.org/

, но у меня проблема с проверкой электронной почты RE.RFC 5322 допускает следующие символы

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

, однако RE в validate.cfc отклоняет 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 не сводятся к предложению решения, и хотя я уведомил Райана об этом (и еще одна ошибкагод назад) он, похоже, не находится в режиме исправления ошибок.

Может кто-нибудь предложить альтернативное регулярное выражение, пожалуйста?

Ответы [ 3 ]

1 голос
/ 09 августа 2010

Это мое типичное регулярное выражение для электронных писем:

^['_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))$
1 голос
/ 09 августа 2010

Я попробую обновить RegEx, чтобы разрешить использование этих специальных символов в имени, но, как правило, у меня очень слабая проверка адресов электронной почты; потому что, казалось бы, никто не реализует их в соответствии со спецификацией. Моя проверка обычно состоит из:

  • содержит '@'
  • содержит 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]$"
0 голосов
/ 09 августа 2010

какую версию CF вы используете?Начиная с CF8, вы можете использовать IsValid () для проверки по электронной почте:

<cfset myemail = "me@exampl.ecom">
<cfoutput>#IsValid("email", myemail)#</cfoutput>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...