【问题标题】:regular expression not working properly in PHP [duplicate]正则表达式在 PHP 中无法正常工作 [重复]
【发布时间】:2012-04-23 13:44:58
【问题描述】:

可能重复:
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 中运行良好

【问题讨论】:

  • 您是否尝试过第一个链接中的“PCRE 不支持 \uXXXX 语法。请改用 \x{XXXX}。请参阅 [regular-expressions.info/unicode.html#codepoint]”?
  • 是的,我使用了 \u{0080}-\u{024F} 安装的 \u0080-\u024F 但不起作用
  • 使用 \x{} 而不是 \u{} ... \u#### 在 javascript 而不是 pcre 中受支持,这就是它在那里工作的原因,使用 \ x{####}
  • @ craniumonempty 是的。谢谢
  • $str = "عربية"; if(preg_match("/[^a-zA-Z0-9_ \,\x{0600}-\x{06FF}]+/u", $str))echo "无效";否则回显“有效”;

标签: php validation codeigniter


【解决方案1】:
$valid = preg_match("/^[a-zA-Z\x{0080}-\x{024F}\s\/\-\)\(\`\.\"\']+$/u",trim($data));

us 切换为xs 并将十六进制括在大括号中,如{0080},还添加一个尾随u 标志。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用双引号时,请注意escape sequence。在您的代码中。

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

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

      最后一个 $ 无效。你必须使用'\$'。 (逃逸时为$)。

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

      preg_match 函数会让你感到困惑,最好使用 qoute 而不是 double-qoute。因此,在这些模式中,您只需担心escape sequence for quote

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 1970-01-01
        • 2012-05-25
        • 2016-05-09
        • 1970-01-01
        相关资源
        最近更新 更多