正则表达式在PHP中无法正常工作

时间:2012-04-23 13:44:58

标签: php validation codeigniter

  

可能重复:
  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中工作正常

3 个答案:

答案 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