1

可能重复:
php - 正则表达式 - PCRE 不支持 \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 - 正则表达式 - PCRE 不支持 \L, \l, \N, \P,

http://www.sitepoint.com/forums/showthread.php?748713-Preg-match-with-php-PCRE-error

请帮忙 。提前致谢 。

更新

这个正则表达式在 javascript 中工作正常

4

3 回答 3

8
$valid = preg_match("/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\`\.\"\']+$/u",trim($data));

将 s切换uxs 并将十六进制包裹在大括号中,例如{0080},还添加一个尾随u标志。

于 2012-04-23T13:54:59.477 回答
1

也许/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\.\"\']+$/` 因为 PCRE 不支持 \u。这是一个替代的合成器与 \p{XXXX} 左右

于 2012-04-23T13:53:03.840 回答
1

使用双引号时,请注意转义序列。在你的代码中。

$valid = preg_match("/^[a-zA-Z\u0080-\u024F\s\/\-\)\(\`\.\"\']+$/",trim($data));

当它同时具有 PHP 的转义序列和 PCRE 模式的转义序列时,它会更加混乱。让我们来看看,

最后一个 $ 无效。你必须使用'\$'。(当逃逸时,它将是 $)。

如果要包含“点”,则必须使用\\\.(粘贴为字符串后,它将\.用于 PCRE,PCRE 将再次转义为“点”字符。否则,如果仅.在 PCRE 中将表示任何字符。

preg_match 函数会让你感到困惑,最好使用 qoute 而不是 double-qoute。因此,在模式中,您只需担心quote 的转义序列

于 2012-04-23T14:07:10.930 回答