【问题标题】:Regex to match all characters except letters and numbers正则表达式匹配除字母和数字以外的所有字符
【发布时间】:2022-05-10 21:00:53
【问题描述】:

我想清理所有上传文件的文件名。我想删除除句点、字母和数字之外的所有字符。我不擅长正则表达式,所以我想我会在这里问。

有人能告诉我如何把它放在一起吗?我正在使用 PHP。

【问题讨论】:

  • 这取决于你的字母是什么意思。 (直到现在)提出的解决方案仅排除 a-zA-Z,但都将匹配这些范围之外的字母,例如 é 等。

标签: php regex


【解决方案1】:
$newfilename=preg_replace('/[^a-zA-Z0-9.]/','',$filename);

【讨论】:

  • 谢谢。这行得通。我也忘了加下划线。这可行,但它是最优的吗? [^a-zA-Z0-9.|_]
  • @Timay:如果要匹配下划线,请使用[^a-zA-Z0-9._],或更简单的[^.\w]
  • 哇......只有这 4 个字符可以匹配除数字、字母之外的所有内容?
  • @Timay:也许你应该阅读更多关于 regexp (regular-expressions.info) 的内容。
  • :) 是的,我同意。我很少使用它,但它肯定不会受到伤害。谢谢你的帮助肯尼。
【解决方案2】:
s/[^.a-zA-Z\d]//g

(这是一个如何使用 RegExp 的 Perl 表达式。在 PHP 中你可以这样做:

$output = preg_replace('/[^.a-zA-Z\d]/', '', $input);

【讨论】:

  • 谢谢肯尼。这也会匹配期间吗?
  • @Timay:^ 的意思是“除此之外的任何字符”。之后的.a-zA-Z\d 表示“句号、字母和数字”。所以它会匹配所有不是句点、字母和数字的字符,然后将它们删除。
  • 谢谢肯尼。我现在要插入它。
  • 肯尼,这根本行不通。例如不匹配 (*&^%^
【解决方案3】:

尝试使用这个:

$cleanString = preg_replace('#\W#', '', $string);

它将删除除字母和数字之外的所有内容。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多