如何限制PHP中电子邮件字段中除下划线,连字符和点之外的特殊字符?

时间:2014-08-18 07:15:10

标签: php email-validation

这是我的代码。

function emailField($email)
{
return filter_var($email, FILTER_VALIDATE_EMAIL);   
}

if(emailField($_POST['email'])=='')
  {
    echo "Invalid email";
  }
  else
  {
  echo "Valid";
  }

这允许所有特殊字符。我想只允许下划线,连字符和点。怎么避免?

2 个答案:

答案 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";
}

另请参阅:http://php.net/manual/en/function.checkdnsrr.php

答案 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';