0

我一直在考虑一方面使用 javascript 对电子邮件进行一些验证,而 filter_var
使用必要的参数和使用 preg_match 的正则表达式进行验证。从长远来看,输入清理已经有很多事情要记住,验证电子邮件时要使用什么.

对于 preg_matchif(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

通过 javascript

function validateForm()
{
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
alert("Not a valid e-mail address");
return false;
}
}

通过 filter_var

<?php
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL))
{
echo("E-mail is not valid");
}
else
{
echo("E-mail is valid");
}
?>
4

1 回答 1

0

是的,这三个变体非常不同。

  • preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)
    

    这个正则表达式非常严格——实际上,它太严格了。它只允许@-符号和点周围的单词字符和减号。例如,它甚至不允许子域(这很常见)。

  • var atpos = email.indexOf("@");
    var dotpos = email.lastIndexOf(".");
    return !(atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
    

    这看起来很不错。它以正确的顺序检查 an@和 a的存在.,这足以识别类似电子邮件的字符串。它可以被正则表达式替换/.+@.+\..+/.test(email)(不允许换行,但这很好)。

  • filter_var($email, FILTER_VALIDATE_EMAIL)
    

    可能是在 PHP 中做到这一点的最佳方式,但请注意它也有一些 缺陷

我还推荐文章停止使用复杂的正则表达式验证电子邮件地址:-)

于 2013-12-10T22:42:17.410 回答