可能重复:
php - regular expression - PCRE does not support \L, \l, \N, \P,
我有一个功能
public function valid_city_state($data)
{
$data = trim($data);
if(!$data)
{
return TRUE;
}
$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));
if(!$valid)
{
$this->form_validation->set_message('valid_city_state', 'Please enter a valid %s.');
return FALSE;
}
else
{
return TRUE;
}
}
它有正则表达式
$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));
执行时,会出现以下错误
A PHP Error was encountered
Severity: Warning
Message: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 9
Filename: home/auth.php
Line Number: 1632
查看了一些示例但无法获得所需的内容
php - regular expression - PCRE does not support \L, \l, \N, \P,
http://www.sitepoint.com/forums/showthread.php?748713-Preg-match-with-php-PCRE-error
请帮忙。提前谢谢。
更新
这个常规表达在javascript中工作正常
答案 0 :(得分:7)
$valid = preg_match("/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\`\.\"\']+$/u",trim($data));
切换u
的{{1}}并将十六进制包装在x
等大括号中,同时添加一个尾随的{0080}
标记。
答案 1 :(得分:1)
也许/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\
。\“\'] + $ /`因为PCRE不支持\ u。
这是一个替代的合成器\ p {XXXX}左右
答案 2 :(得分:1)
使用双引号时,请注意escape sequence。在你的代码中。
$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));
当它具有PHP的转义序列和PCRE模式的转义序列时会更加混乱。我们来看看,
最后一个$无效。你必须使用'\ $'。 (逃跑时,它将是$)。
如果要包含'dot',则必须使用\\\.
(在粘贴为字符串后,对于PCRE将为\.
,PCRE将再次转义为'dot'字符。否则,如果PCRE中只有.
表示任何字符。
preg_match函数会让你迷惑,最好使用qoute而不是double-qoute。因此,在模式中,您只能担心escape sequence for quote。