javascript和正则表达式之间的区别以及用于电子邮件验证的filter_var

时间:2013-12-10 21:37:43

标签: javascript regex validation email filter-var

我一直在使用javascript和filter_var进行一些电子邮件验证 使用preg_match进行必要的参数和正则表达式。现在,作为输入,sanitaisation已经长期存在,需要记住很多事情,以便在验证电子邮件时使用。

for preg_match if(!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;
}
}

by filter_var

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

  • filter_var($email, FILTER_VALIDATE_EMAIL)
    

    This可能是在PHP中执行此操作的最佳方式,但请注意,它还有some flaws

我还会推荐文章Stop Validating Email Addresses With Complicated Regular Expressions: - )