【问题标题】:Regex with only: numbers, letters and accents正则表达式仅包含:数字、字母和重音符号
【发布时间】:2016-12-19 14:02:38
【问题描述】:

我需要使用 PHP 过滤字符串以仅返回“数字、字母和带重音符号的字母”。

我尝试了许多不同的正则表达式,但都做不到。

我得到的最接近的是:

$string = 'Você está bem? 123 # ! @ ...';
echo preg_replace('/[^\w\s+$]/', '_', $string);

// Return: Voc__ est__ bem_ 123 _ _ _ ___
// But I need to return: Você_está_bem_123 _ _ _ ___

有人可以帮助我吗?我试图解决它几个小时,甚至在这里寻找其他问题。

【问题讨论】:

    标签: php regex replace diacritics


    【解决方案1】:

    添加/u 修饰符:

    $string = 'Você está bem? 123 # ! @ ...';
    echo preg_replace('/[^\w\s+$]/u', '_', $string);
                                  ^
    

    this IDEONE demo

    更多关于 SO 正则表达式文档中的 /u 修饰符:

    模式和主题字符串被视为 UTF-8。

    【讨论】:

    • 仅供参考:如果您的输入还包含变音符号作为单独的符号(您需要将\p{M} 添加到字符类中:/[^\w\p{M}\s+$]/u as /\w/u 仅匹配 [\p{L}\p{N}_]
    • 成功了,谢谢!但是,我需要使用“utf8_decode”,所以不起作用:ideone.com/IagsYU
    • 您应该在 Unicode 字符串 上运行正则表达式,然后将其传递给 utf8_decode
    • 我发现不需要“utf8_decode()”,然后将其删除。缺少的是“charset = utf-8”。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多