如何只允许一个电子邮件地址并检查@符号以验证电子邮件地址?

时间:2010-07-18 04:19:59

标签: php validation

我想知道如何只允许一个电子邮件地址?另外,我如何只检查电子邮件地址中的@符号以验证电子邮件?

这是我的PHP代码。

if (isset($_GET['email']) && strlen($_GET['email']) <= 255) {
    $email = mysqli_real_escape_string($mysqli, strip_tags($_GET['email']));
} else if($_GET['email'] && strlen($_GET['email']) >= 256) {
    echo '<p>Your email cannot exceed 255 characters!</p>';
}

5 个答案:

答案 0 :(得分:6)

别。

使用a completely RFC-compliant validator代替,然后使用实际邮件发送到该地址。确实,向该地址发送邮件是确保它是合法电子邮件地址的唯一真正方法。

答案 1 :(得分:4)

PHP有filter_var可以像这样使用:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    if (strpos($email, "@") === true) {
        // VALID
    }
}

这是检查公共地址是否有效(并且不允许明显假货)的简单方法,但是,根据RFC 822RFC 2822,这不能确保您的电子邮件地址有效或RFC 3696

我还想指出this。这将根据适当的RFC验证电子邮件地址。

答案 2 :(得分:0)

如果是表单,您可以在表单中使用input type="email"。它是HTML5的一部分,因此尚未在所有浏览器中实现。

这不会达到完全目的,但它会阻止单个页面加载明显的错误(忘记@或.com)来帮助一点。实施它的浏览器会阻止您提交表单,如果它无效;此外,Apple设备将使用特殊键盘为“@”和“.com”提供该条目。

(只是一个额外的信息,因为我不知道你的整个情况。)

答案 3 :(得分:0)

  

如何只允许一个电子邮件地址?

运行SELECT查询以查看是否已有此类电子邮件。

  

我怎样才能检查电子邮件中的@符号

strpos 就足够了 虽然通过向该地址发送一封信来确认电子邮件地址是个好主意,但是你知道。

您的代码中还有一些要纠正的内容。

您的else if声明不是必需的,应该只有else

和mysqli_real_escape_string不应该在验证部分。它是数据库相关的功能,而不是验证功能。

如果是注册表,则应使用POST方法

所以,像这样......

$err = array();
if (empty($_POST['email']) $err['email'] = "email cannot be empty";
if (strlen($_POST['email']) >= 256) $err['email'] = "email is too long";
if (!strpos("@",$_POST['email'])) $err['email'] = "malformed email";

$query = "SELECT 1 FROM members WHERE email ='".
          mysqli_real_escape_string($mysqli, $_POST['email'])."'";
$res   = mysqli_query($mysqli, $query) or trigger_error(mysqli_error($mysqli).$query);
if (mysqli_num_rows($res)) $err['email']="email already present";

//other validations as well

if (!$err) {
  //escape all the data.
  //run your insert query.
  header("Location: ".$_SERVER['REQUEST_URI']);
  exit;
} else {
  foreach($_POST as $key => $value) {
    $_FORM[$key]=htmlspecialchars($value,ENT_QUOTES);
  }  
  include 'form.php';
}

答案 4 :(得分:-3)

尝试使用正则表达式...你可以在谷歌找到模式

on eg:

if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ 
echo "<center>Invalid email</center>"; 
}else{
echo "<center>Valid Email</center>";} 
}

为preg_match编辑:

if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
echo "<center>Invalid email</center>"; 
}else{
echo "<center>Valid Email</center>";
}