这是我目前用于验证英语和英语的正则表达式代码。数:
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范围。 什么是错在这里?
答案 0 :(得分:3)
我能够使用/u
标记和\p{Hebrew}
Unicode character property更轻松地使其工作:
return preg_match('/^(?:\p{Hebrew}+|\w+)$/iu', $str);
答案 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。