2014-10-06 41 views
2

我在验证名称时出现此错误....我在几个月前搜索了国际名称的正则表达式,并最终得到了在这里工作的东西:Accept international name characters in RegExpreg_match():编译失败:字符类中的偏移量为15的范围无效

,但现在它显示我此错误,请帮助

的preg_match():编译失败:无效的范围在字符类偏移量15

if(preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name)) { 
    return true; 
} else{ 
    $this->addError($field_name.' contains invalid characters'); 
    return false; 
} 

也试试这个的preg_match(“/^[\ S ,。 - \ pL] + $ /“,$ name)但是仍然显示相同的错误

回答

10

连字符(-)需要转义,因为它在字符类中的位置。

说明:在字符类里连字符有特殊含义。您可以将其作为课程的第一个或最后一个字符。在一些正则表达式实现中,你也可以直接放在范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。

if(preg_match("/^[a-zA-Z\s,.'\-\pL]+$/u", $name)) { ... 
          ^^ 

你可以写正则表达式如下:

if(preg_match("/^[\pL\s,.'-]+$/u", $name)) { ... 
+0

太感谢你了..我搜索了将近一个小时的解决方案,你解决这个瞬间谢谢! – Sparsh 2014-10-06 00:46:12

+0

如您所说,如果我使用preg_match(“/^[\ pL \ s,.'-] + $/u”),可以吗? – Sparsh 2014-10-06 01:14:45

+0

我不明白为什么不= =) – hwnd 2014-10-06 01:15:30

相关问题