我需要从字符串中删除不在a-z A-Z 0-9
集中的所有字符或不是空格。
有人有这个功能吗?
听起来你几乎已经知道你想要做什么,你基本上把它定义为正则表达式。
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
对于unicode字符,它是:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
Regular expression是你的答案。
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
代表不区分大小写。^
的意思是,不是从一开始。\d
匹配任何数字。a-z
匹配a
和z
之间的所有角色。由于i
参数,您不必指定a-z
和A-Z
。\d
之后有一个空间,所以这个正则表达式允许空格。这是一个非常简单的正则表达式:
\W|_
并根据需要使用(使用前向/
斜线分隔符)。
preg_replace("/\W|_/", '', $string);
在这里用这个很好的工具测试它,解释正则表达式正在做什么:
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
它选择所有不是A-Z,a-z,0-9并删除它。
请参见此处的示例:https://regexr.com/3h1rj
如果您需要支持其他语言,而不是典型的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} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
注意:这是一个非常古老但仍然相关的问题。我的回答纯粹是为了提供可能对未来访客有用的补充信息。
preg_replace("/\W+/", '', $string)
你可以在这里测试一下:http://regexr.com/
我也在寻找答案,我的目的是清理每个非alpha,并且不应该有多个空格。
所以,我修改了Alex对此的回答,这对我来说是有效的preg_replace('/[^a-z|\s+]+/i', ' ', $name)
上面的正则表达式将sy8ed sirajul7_islam
变为sy ed sirajul islam
说明:正则表达式将以不区分大小写的方式检查从a到z的任何一个或多个空格,并且它将被转换为单个空格。
我用这个:
//to remove non english character
$str = preg_replace('/[^\00-\255]+/u', '', $str);