这是我的代码。
function emailField($email)
{
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
和
if(emailField($_POST['email'])=='')
{
echo "Invalid email";
}
else
{
echo "Valid";
}
这允许所有特殊字符。我想只允许下划线,连字符和点。怎么避免?
答案 0 :(得分:0)
使用这样的RegEx:
/^[\w\.]+@/
然后你还应该检查域是否真的存在。
PHP:
$regex = "/^[\w\.]+@/";
$email = emailField($_POST['email']);
$domain = preg_replace($regex, '', $email); //get the domain of the email address by removing the local-part
//Using checkdnsrr we are checking if this domain is registred
if($email == '' && preg_match($regex, $email) && checkdnsrr($domain)){
echo "Valid";
}
答案 1 :(得分:0)
使用复杂的filter_var
验证和简单的preg_match
验证。
function validate_email_popularly($email) {
return
filter_var($email, FILTER_VALIDATE_EMAIL)
&& preg_match('/\A[\w.-]*+@[\w.-]*+\z/', $email)
;
}
您还应该使用filter_input
代替$_POST
。此功能可以将意外的注意:未定义的索引或Array
过滤到False
。
$email = filter_input(INPUT_POST, 'email');
echo validate_email_popularly($email) ? 'Valid' : 'Invalid';