希伯来语正则表达式匹配不在PHP中工作

时间:2011-07-22 21:29:59

标签: php regex

这是我目前用于验证英语和英语的正则表达式代码。数:

const CANONICAL_FMT = '[0-9a-z]{1,64}';

public static function isCanonical($str)
{
    return preg_match('/^(?:' . self::CANONICAL_FMT . ')$/', $str);

}

非常直接。现在我想改变它以仅验证希伯来语,下划线 和数字。所以我将代码更改为:

public static function isCanonical($str)
{
    return preg_match('/^(?:[\u0590-\u05FF\uFB1D-\uFB40]+|[\w]+)$/i', $str);

} 

但它不起作用。我基本上把维基百科的希伯来语UTF范围。 什么是错在这里?

3 个答案:

答案 0 :(得分:3)

我能够使用/u标记和\p{Hebrew} Unicode character property更轻松地使其工作:

return preg_match('/^(?:\p{Hebrew}+|\w+)$/iu', $str);

工作示例:http://ideone.com/gSlmh

答案 1 :(得分:1)

如果您希望preg_match()能够正常使用UTF-8,则可能需要启用u modifier (引用)

  

此修饰符打开PCRE的其他功能   与Perl不兼容。模式字符串被视为UTF-8。


在您的情况下,而不是使用以下正则表达式:

/^(?:[\u0590-\u05FF\uFB1D-\uFB40]+|[\w]+)$/i

我想你会使用:

/^(?:[\u0590-\u05FF\uFB1D-\uFB40]+|[\w]+)$/iu

(注意最后的附加u

答案 2 :(得分:1)

您需要/ u修饰符来添加对UTF-8的支持。

如果它在某些其他代码页/字符集中,请确保将希伯来语输入转换为UTF-8。