php preg_match与电子邮件验证问题

时间:2012-11-19 04:08:01

标签: php

我正在使用带preg_match功能的php验证电子邮件地址。但我不断收到以下错误

preg_match(): No ending delimiter '^' found

这是我的preg_match模式

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

如何解决这个问题?

7 个答案:

答案 0 :(得分:15)

只需使用:

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

答案 1 :(得分:9)

也许正在使用

filter_var($email, FILTER_VALIDATE_EMAIL);

这将是一种更简单的方法。

答案 2 :(得分:4)

使用此代码

<?php
 $email = "asd/sdff@asdf.com"; 
 $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
 $email = (preg_match($regex, $email))?$email:"invalid email";
?>

答案 3 :(得分:0)

如果邮件管理员希望允许RFC样式匹配电子邮件地址,则在PHP中使用函数filter_var()会更容易。对于某些应用程序或MTA(sendmail等),这可能并不可取。但是,如果要使用preg_match()路由,我建议调查非贪心量词并捕获不使用缓冲区的语句。一个好的起点是http://us3.php.net/manual/en/book.pcre.php

答案 4 :(得分:0)

由于FILTER_VALIDATE_EMAIL导致的问题(例如,它对非拉丁字符不起作用),我更喜欢使用:

preg_match("/^[^@]+@[^@]+\.[a-z]{2,6}$/i",$email_address);

答案 5 :(得分:0)

这是一个简单的电子邮件验证方法,带有正则表达式:

public function emailValidation($email) 
{
    $regex = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,10})$/";
    $email = strtolower($email);

    return preg_match ($regex, $email);
}

答案 6 :(得分:-2)

    var emailid = $.trim($('#emailid').val());  
  if( ! /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(emailid)){
                alert("<?php echo "email_invalid" ?>");

                return false;
            }

emailid是输入标记的id