preg_match没有按预期工作

时间:2014-11-24 11:17:28

标签: php preg-match cyrillic

我正在使用这样的模式在我的文本中找到西里尔符号,但它在unicode货币符号“₴”(乌克兰语hryvnya)和“€”(欧元)上返回true

$pat = '/.*[А-Яа-яёЁ].*/';
$res = preg_match($pat, $str);

有什么问题?

1 个答案:

答案 0 :(得分:2)

您应该使用/u修饰符

使您的模式具有unicode感知能力
$pat = '/.*[А-Яа-яёЁ].*/u';
$res = preg_match($pat, $str);

引用the doc

  你是(PCRE_UTF8)

     

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

Demo。顺便说一句,如果您只检查字符串中是否存在西里尔字母而没有在匹配中执行任何操作(并使用给定的代码),则可以从模式中删除.*个部分。