如何以多字节安全的方式从字符串中删除字符,例如标点符号、逗号、破折号等?
我将处理来自许多不同语言的输入,想知道是否有方法可以帮助我处理这个问题。
谢谢
你可以使用Unicode字符类功能来实现:
如果要匹配任何非字母符号,只需使用\PL+
,即不是 \p{L}
的反义。若要保留空格,请使用字符集如[^\pL\s]+
。或者只需使用\pP+
去除标点符号。
当然,不要忘记正则表达式的/u
修饰符。
[^\pL^\pN\s]+
。 - genonymous我使用了这个:
$clean = preg_replace( "/[^\p{L}|\p{N}]+/u", " ", $raw );
$clean = preg_replace( "/[\p{Z}]{2,}/u", " ", $clean );
相关帖子
我不确定这是否涵盖了所有字符。
根据dreamincode论坛上的这篇帖子
http://www.dreamincode.net/forums/topic/78179-regular-expression-to-remove-non-ascii-characters/
这应该可以工作
/[^\x{21}-\x{7E}\s\t\n\r]/
这可能会有用吗?
$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring);
a-z
和0-9
吗?还是所有来自不同语言的特殊字符也要保留? - Marcus