正则表达式之谜:“找不到结束分隔符'^'

时间:2013-11-21 19:41:14

标签: regex filter-var

有人可以向我解释一下吗? 这是我的代码:

 $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+'
            . '(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
    if (preg_match($regex, $email)) {
        echo $email . " is a valid email. We can accept it.";
    } else { 
        echo $email . " is an invalid email. Please try again.";
    }

如果我使用这个正则表达式的例子:

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

或我得到的另一个不同的正则表达式:

preg_match() [function.preg-match]: No ending delimiter '^' found

如果我使用filter_var('some_regular_expression', FILTER_EMAIL_VALIDATOR),则asd!qwe@gmail.com之类的电子邮件是有效的???

1 个答案:

答案 0 :(得分:1)

使用preg_XXX函数时,正则表达式参数的第一个字符是分隔符 - 在第一个示例中为/。它必须出现在正则表达式的末尾,它用于将正则表达式与修饰符选项字符分开,例如:

/[a-z]/i

第二个/将正则表达式与i(不区分大小写)修饰符分开。

因此,您只需将正则表达式更改为:

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

我不确定字符在那里是什么。它似乎不适合验证电子邮件。

是的,asd!qwe@gmail.com是有效的电子邮件。回到UUCP邮件传输的那一天,host1!host2!host3!username@uu.net形式的地址很常见 - UUCP路径中的!个字符分隔了主机名。有关电子邮件验证的建议,请参阅Using a regular expression to validate an email address