【问题标题】:Remove all hyphens, special characters etc. from string in PHP从 PHP 中的字符串中删除所有连字符、特殊字符等
【发布时间】:2016-09-16 05:22:09
【问题描述】:

是否有一个通用的正则表达式可以删除 ALL 连字符、特殊字符等,所以我只会得到字母。

例如,一个正则表达式包含:,./?;':"|[]{}-=_+1234567890!@#$%^&*()|\ ~` 以及所有连字符和特殊字符字符。

(不知道这是否称为正则表达式,但我希望你明白)

【问题讨论】:

  • 你只想得到a-zA-Z而不是数字吗?
  • 正则表达式作为白名单:[a-z]/i 开关不区分大小写,如果你只想要字母(如果你想要非 ASCII 字母,那么这样说)
  • 你为什么不在str_replce("/your_removal_list/", "" $str)试试这个
  • @FrayneKonok 这意味着 OP 需要做一堆 str_replace() 在这种情况下不如 preg_replace()
  • @Chay22,OP没有提到他需要多少字符,所以我给出了这个建议。

标签: php regex string special-characters str-replace


【解决方案1】:

这应该有效:

$string = preg_replace("/[^a-zA-Z]+/", "", $string);

如果你想保留数字,请使用这个:

$string = preg_replace("/[^a-zA-Z0-9]+/", "", $string);

【讨论】:

  • 这似乎也删除了字母,现在它什么也没显示:p
  • i 切换为不区分大小写
  • 我切换?那是什么?
  • @MaartenWolfsen - i 开关将使用$string = preg_replace("/[^a-z]+/i", "", $string);(注意在正则表达式中终止/ 之后的i,它表示正则表达式解析器“不区分大小写”
  • \P{L} 不需要“开关”(称为修饰符)
【解决方案2】:

如果您只需要获取字母,请删除所有非字母:

preg_replace('~\P{L}+~u', '', $input)

\P{L} 是一个 Unicode 属性,它匹配除 Unicode 字母之外的所有字符。 请参阅regex demo

如果您还需要处理变音符号(即,如果您需要保留它们),请使用

preg_replace('~[^\p{M}\p{L}]+~u', '', $input)

其中\p{M} 匹配任何变音符号,[^\p{M}\p{L}]+ 匹配除字母和变音符号之外的 1 个或多个字符。

another demo

【讨论】:

  • 几乎可以工作,但不能删除 - 连字符
  • 仍然没有删除 / - 和 _
  • @MaartenWolfsen:您应该展示您的代码,因为它在正则表达式发挥作用之前处理某些事情。 The regex removes all symbols other than letters
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 2012-02-17
  • 2014-02-22
  • 1970-01-01
  • 2012-05-04
  • 2016-08-23
  • 2012-12-16
相关资源
最近更新 更多