如何删除非字母数字字符?

问题描述 投票:311回答:9

我需要从字符串中删除不在a-z A-Z 0-9集中的所有字符或不是空格。

有人有这个功能吗?

php regex string
9个回答
640
投票

听起来你几乎已经知道你想要做什么,你基本上把它定义为正则表达式。

preg_replace("/[^A-Za-z0-9 ]/", '', $string);

157
投票

对于unicode字符,它是:

preg_replace("/[^[:alnum:][:space:]]/u", '', $string);

48
投票

Regular expression是你的答案。

$str = preg_replace('/[^a-z\d ]/i', '', $str);
  • i代表不区分大小写。
  • ^的意思是,不是从一开始。
  • \d匹配任何数字。
  • a-z匹配az之间的所有角色。由于i参数,您不必指定a-zA-Z
  • \d之后有一个空间,所以这个正则表达式允许空格。

16
投票

这是一个非常简单的正则表达式:

\W|_

并根据需要使用(使用前向/斜线分隔符)。

preg_replace("/\W|_/", '', $string);

在这里用这个很好的工具测试它,解释正则表达式正在做什么:

http://www.regexr.com/


5
投票
[\W_]+

$string = preg_replace("/[\W_]+/u", '', $string);

它选择所有不是A-Z,a-z,0-9并删除它。

请参见此处的示例:https://regexr.com/3h1rj


4
投票

如果您需要支持其他语言,而不是典型的A-Z,则可以使用以下语言:

preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
  • [^\p{L}\p{N} ]定义了一个否定的(它将匹配一个未定义的字符)字符类: \p{L}:来自任何语言的信件。 \p{N}:任何脚本中的数字字符。 :一个空间角色。
  • +贪婪地匹配1和无限次的字符类。

这将保留其他语言和脚本以及A-Z的字母和数字:

preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界

注意:这是一个非常古老但仍然相关的问题。我的回答纯粹是为了提供可能对未来访客有用的补充信息。


2
投票
preg_replace("/\W+/", '', $string)

你可以在这里测试一下:http://regexr.com/


0
投票

我也在寻找答案,我的目的是清理每个非alpha,并且不应该有多个空格。 所以,我修改了Alex对此的回答,这对我来说是有效的preg_replace('/[^a-z|\s+]+/i', ' ', $name) 上面的正则表达式将sy8ed sirajul7_islam变为sy ed sirajul islam 说明:正则表达式将以不区分大小写的方式检查从a到z的任何一个或多个空格,并且它将被转换为单个空格。


-8
投票

我用这个:

//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);
© www.soinside.com 2019 - 2024. All rights reserved.