正则表达式之谜:"No ending delimiter '^' found"



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

 $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这样的电子邮件是有效的???

使用 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路径中的主机名。有关电子邮件验证的建议,请参阅使用正则表达式验证电子邮件地址。

最新更新