正则表达式从UTF8字符串中删除非字母数字字符

时间:2011-12-01 20:14:08

标签: php regex

如何以多字节安全的方式从字符串中删除字符,如标点符号,逗号,短划线等?

我将处理来自许多不同语言的输入,我想知道是否有什么可以帮助我解决这个问题

由于

4 个答案:

答案 0 :(得分:24)

您可以使用unicode字符类thingys:

要匹配任何非字母符号,您只能使用\PL+,否定\p{L}。要不删除空格,请使用类似[^\pL\s]+的charclass。或者只是使用\pP+

删除标点符号

好吧,显然不要忘记正则表达式/u修饰符。

答案 1 :(得分:1)

我用过这个:

$clean = preg_replace( "/[^\p{L}|\p{N}]+/u", " ", $raw );
$clean = preg_replace( "/[\p{Z}]{2,}/u", " ", $clean );

答案 2 :(得分:0)

类似的帖子

Remove non-utf8 characters from string

我不确定这是否涵盖了所有角色。

根据Dreamincode论坛上的这篇文章

http://www.dreamincode.net/forums/topic/78179-regular-expression-to-remove-non-ascii-characters/

这应该有效

/[^\x{21}-\x{7E}\s\t\n\r]/

答案 3 :(得分:-1)

也许这会有用吗?

$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring);