Cha*_*rch 668
听起来你几乎已经知道你想做什么,你基本上把它定义为正则表达式.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
Run Code Online (Sandbox Code Playgroud)
voo*_*ndo 166
对于unicode字符,它是:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
Run Code Online (Sandbox Code Playgroud)
ras*_*spi 49
正则表达是你的答案.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
Run Code Online (Sandbox Code Playgroud)
i代表不区分大小写.^ 意思是,不是从一开始. \d 匹配任何数字. a-z匹配a和之间的所有字符z.由于i参数,您不必指定a-z和A-Z.\d有一个空格,这样的空间才能在此正则表达式.Ale*_*ens 17
这是一个非常简单的正则表达式:
\W|_
Run Code Online (Sandbox Code Playgroud)
并根据需要使用(使用正/斜杠分隔符).
preg_replace("/\W|_/", '', $string);
Run Code Online (Sandbox Code Playgroud)
在这里用这个很好的工具测试它,解释正则表达式正在做什么:
如果需要支持其他语言,而不是典型的可用区,则可以使用以下语言:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
Run Code Online (Sandbox Code Playgroud)
[^\p{L}\p{N} ]定义了一个否定(它将匹配在一个字符不定义)字符类的:
\p{L}:任何语言的信件。\p{N}:任何脚本中的数字字符。:空格字符。+ 贪婪地在1到无限次之间匹配字符类。这将保留其他语言和脚本以及AZ的字母和数字:
preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '????!@£$%^&*()'); // ????
Run Code Online (Sandbox Code Playgroud)
注意:这是一个非常古老但仍然相关的问题。我的回答纯粹是为了提供可能对将来的访问者有用的补充信息。
[\W_]+
Run Code Online (Sandbox Code Playgroud)
$string = preg_replace("/[\W_]+/u", '', $string);
Run Code Online (Sandbox Code Playgroud)
它选择所有非AZ,az,0-9并将其删除。
在此处查看示例:https://regexr.com/3h1rj