【问题标题】:how to strip all characters except for alphanumeric and underscore and dash?如何去除除字母数字和下划线和破折号以外的所有字符?
【发布时间】:2011-08-29 02:57:26
【问题描述】:

我不是正则表达式专家:( 我试图从字符串中删除除字母数字和下划线和破折号之外的所有字符。 这是正确的语法吗?:

preg_replace("/[^a-z0-9_-]+/i", "", $string);

【问题讨论】:

  • 测试需要2s就能知道结果。

标签: php pcre


【解决方案1】:

可以,但可以稍微优化一下:

preg_replace('/[^\w-]/', '', $string);

\w 匹配字母数字字符和下划线。如果您的语言环境允许,这具有允许重音字符的额外优势。

【讨论】:

  • 你不必在方括号后添加+来指定方括号内的模式可以重复吗?
  • @Andre 正则表达式在 PHP(例如与 Javascript 相对)中是自动全局的。这意味着与正则表达式匹配的每个字符都将被替换。所以,取一个字符串.],这个正则表达式匹配.,用一个空白字符串替换它,然后匹配]并且做同样的事情。
【解决方案2】:

【讨论】:

    【解决方案3】:

    你所拥有的看起来会起作用。您可能需要添加空格,因为它们不是字母数字字符:

    preg_replace("/[^a-z0-9_-\s]+/i", "", $string);
    

    【讨论】:

    • i 修饰符“不区分大小写”
    • /i 表示已经不区分大小写,无需加大写。
    猜你喜欢
    • 2022-09-27
    • 2015-10-07
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多