preg_match不是Unicode正则表达式的验证罗马字符

时间:2016-11-03 08:48:02

标签: php regex unicode

我有以下要求:

  • 匹配所有Unicode字符。(非特定罗马字符)

  • 最大字符数为255。

  • 不接受数字字符。

我已经为此编写了以下代码和正则表达式。它完美适用于ASCII字符并满足上述所有要求,但在使用罗马字符时失败。

请告诉我错误的地方。

<?php
    $text = "ăâáéíîó";
    $pattern = "/^[p{L}p{M}*+]{1,255}$/"; 

    $ret = preg_match($pattern,$text,$match);

    echo "Return Value =  $ret";
    echo "<pre>";
    print_r($match);
?>

输出:

Return Value = 0
Array
(
)

1 个答案:

答案 0 :(得分:1)

您需要添加以下修复程序:

  • 类别类将使用\ - \p{L}\p{M}定义。
  • 带有可能的变音模式的字母应该分组在分组构造内而不是char类
  • 处理Unicode时需要/u修饰符。

使用

$pattern = "/^(?:\p{L}\p{M}*+){1,255}$/u"; 

请参阅PHP demo