2010-04-21 62 views
1

我想通过使用\ w通配符筛选字符串,但不幸的是它不包含元音变音。preg_replace:通配符不匹配元音变音字符

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

但是,我可以将所有字符添加到preg_replace,但这不是很优雅,因为列表将变得非常长。自动取款机,我正在准备这只适用于德语,但有更多的语言来。

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

有没有办法一次匹配所有的人?

回答

6

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

$x = preg_replace('/[^\p{L}\p{N} ]/u',"",$i); 
1

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

$val = "Die Höhe"; 
$val = preg_replace('/[^\x20-\x7e\xa1-\xff]+/u', '', $val); 
echo $val; // "Die Höhe"