2

我想使用 \w 通配符过滤字符串,但不幸的是它不包括变音符号。

$i = "Die Höhe";    
$x = preg_replace("/[^\w\s]/","",$i);
echo $x; // "Die Hhe";

但是,我可以将所有字符添加到 preg_replace,但这不是很优雅,因为列表会变得很长。ATM,我只为德语准备这个,但还有更多语言可供选择。

$i = "Die Höhe";    
$x = preg_replace("/[^\w\säöüÄÖÜß]/","",$i);
echo $x; // "Die Höhe";

有没有办法一次匹配所有这些?

4

2 回答 2

7

你的字符串显然是 UTF-8,所以你想要 'u' 标志和 unicode 属性而不是 \w

$x = preg_replace('/[^\p{L}\p{N} ]/u',"",$i);
于 2010-04-22T00:04:32.003 回答
1

在我看来,这应该删除所有无意义的字符:

$val = "Die Höhe";
$val = preg_replace('/[^\x20-\x7e\xa1-\xff]+/u', '', $val);
echo $val; // "Die Höhe"
于 2017-07-05T07:13:50.320 回答