【问题标题】:Regex remove the specials chars and keep the accents and ()@-_'& chars正则表达式删除特殊字符并保留重音符号和 ()@-_'& 字符
【发布时间】:2014-03-16 14:41:24
【问题描述】:

在我当前的 PHP 代码中,特殊字符有很多问题,我想用正则表达式替换它们。你知道我是怎么做到的吗?

我只想接受:

所有带重音的字母 所有号码 ()@-_'&

我的正则表达式:

preg_replace('/[^\p{L}0-9\-]/u', '', $string);

就是这样。这个正则表达式是为下载文件制作一个干净的标题。

感谢大家的帮助。 最好的问候,

【问题讨论】:

    标签: php regex replace preg-replace str-replace


    【解决方案1】:

    你可以只在你的字符类中包含允许的字符:

    $replaced = preg_replace("/[^\p{L}0-9()@_'&-]+/u", '', $string);
    

    最好在此处使用量词 + 来提高替换过程的效率,因为在每次调用中都会匹配和替换多个字符。

    【讨论】:

    • 很好,谢谢!你的正则表达式和preg_replace("/[^\p{L}0-9\(\)\@\_\'\&\-]+/u", '', $string);一样吗?
    • 是的,但您不需要在字符类中进行过多的转义。
    • 哇,好吧!谢谢你的帮助。 :) 我点击解决!
    【解决方案2】:

    当您使用\pL 表示字母时,您可以使用\pN 表示数字:

    preg_replace("/[^\p{L}\p{N}()@_'&-]+/u", '', $string);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      相关资源
      最近更新 更多