我一直在使用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");
}
?>
答案 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)
我还会推荐文章Stop Validating Email Addresses With Complicated Regular Expressions: - )