Preg_Match - 正则表达式错误 [重复]
Posted
技术标签:
【中文标题】Preg_Match - 正则表达式错误 [重复]【英文标题】:Preg_Match - RegEx Error [duplicate] 【发布时间】:2013-10-05 00:16:24 【问题描述】:使用以下代码
$regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
."@[a-z0-9-]+(\.[a-z0-9-]1,)*"
."\.([a-z]2,)1$";
if(!preg_match($regex,$subemail))
$form->setError($field, "* Email invalid");
$subemail = stripslashes($subemail);
我收到以下错误
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found
任何帮助将不胜感激。
【问题讨论】:
即使您修复分隔符,您的模式也会在 很多 电子邮件地址上失败:emailtester.pieterhordijk.com/test-pattern/NTE php.net/manual/en/function.filter-var.php 【参考方案1】:现在它认为^
是开始分隔符,因此期待在末尾有另一个分隔符。您可以使用任意数量的分隔符,例如/
和/
,或@
和@
,或<
和>
等。下面的一个使用/
和/
作为它的开/关分隔符:
$regex = "/^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
."@[a-z0-9-]+(\.[a-z0-9-]1,)*"
."\.([a-z]2,)1$/";
【讨论】:
【参考方案2】:你必须用#
或/
包围你的模式,像这样:"#[abc]+#"
我个人使用 # 因为它比 / 更明显
对于电子邮件验证标准 PHP 函数,请使用 filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
(请参阅 http://www.php.net/manual/en/function.filter-var.php)
【讨论】:
以上是关于Preg_Match - 正则表达式错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式,PHP preg_match 使函数如何在字符串以 start_to_date 开头时返回 true [重复]
PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat