【问题标题】:preg_match is not validation roman character for Unicode regular expressionpreg_match 不是 Unicode 正则表达式的验证罗马字符
【发布时间】:2016-11-03 08:48:01
【问题描述】:

我有以下要求:

  • 匹配所有 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
(
)

【问题讨论】:

    标签: php regex unicode


    【解决方案1】:

    您需要添加以下修复:

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

    使用

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

    PHP demo

    【讨论】:

    • 非常感谢。我已经用“\”定义了类别类,但是在格式化期间它被我错误地删除了。我也尝试了上面的表达式,但忘记添加 "/u" 。
    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多