!preg_match用于电子邮件检查

时间:2012-11-15 19:09:48

标签: preg-match email-validation

我有此命令检查有效的电子邮件地址。我刚刚发现,当我尝试将此添加到我们的电子邮件服务器时(此表单中的所有电子邮件请求都是本地电子邮件地址),电子邮件服务器不允许使用数字字符来启动电子邮件地址/用户名。我已经阅读了命令preg_match的所有文档,如果它在第一个字符位置以数字开头,则无法找到如何使其失败。我是新手,所以任何帮助将不胜感激。

if (!preg_match("(^[-\w\.]+@([-a-z0-9]+\.)+[a-z]{2,4}$)i", $in_email))

3 个答案:

答案 0 :(得分:0)

试试这个;

/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

使用如下

$regex = '/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';

if (preg_match($regex, $email)) {
    // Valid email
} else { 
    // Invalid email
}

答案 1 :(得分:0)

在php中,您可以将以下代码与php filter_var函数一起使用,该函数在使用指定的过滤条件过滤变量后返回布尔值。

 if(filter_var($email,FILTER_VALIDATE_EMAIL))
        { 
        //valid email
        }
        else{
        //INVALID EMAIL
        }

如果电子邮件采用正确格式,则函数filter_var将返回true,否则为false。

答案 2 :(得分:0)

如果我们的域没有点,则此答案不起作用。对于这种情况,我从:

/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/

致:

/^[^0-9][_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]{2,})+(\.[a-z0-9-]{2,})*$/

更新: 用户@Toto 正确地看到了正则表达式的一个问题,它可以以任何字符开头而不是数字开头。例如:@-----.--.---.----@-- 已验证。所以我将 /^[^0-9] 更改为 /^[a-z],现在是正确的:

/^[a-z][_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]{2,})+(\.[a-z0-9-]{2,})*$/

适用于这些用例:

  • user@domain
  • aa@aa
  • aa@aa.aa
  • aa.aa@aa