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

14

如何以多字节安全的方式从字符串中删除字符,例如标点符号、逗号、破折号等?

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

谢谢


你只想保留a-z0-9吗?还是所有来自不同语言的特殊字符也要保留? - Marcus
解释为什么我的结果不如建议的更好。 - user557846
@Marcus。我需要保留Unicode字符。 - Thomas
4个回答

26

我认为这个有潜力,我需要进行调查。谢谢 Mario。 - Thomas
为了匹配空格字符(代码点),请使用 \pZ 而不是 \s。 - Mr Coder
1
这并不处理非数字部分。正确的答案应该是 [^\pL^\pN\s]+ - genonymous

2

我使用了这个:

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

3
你能否描述一下这里到底发生了什么? - Luke Rehmann

0

我认为这仅适用于ASCII,而作者明确提到了UTF8字符串。 - Pateman

-2

这可能会有用吗?

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

5
这将同时删除非 ASCII 字符。我不希望这样。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接