如何删除带有数字的特殊/重音字符和单词?

时间:2012-11-30 13:17:32

标签: php regex

我正在努力创造slu ..我的字符串是这样的:$string='möbel#*-jérôme-mp3-how?';

步骤:1

首先,我想从此字符串中删除特殊字符,非字母数字和非拉丁字符。

像这样:$string='möbel-jérôme-mp3-how';

以前,我以前只在字符串中只有英文字符。

所以,我过去经常这样做:$string = preg_replace("([^a-z0-9])", "-", $string);

但是,由于我还想保留外国字符,因此无效。

步骤:2

然后,我想删除所有包含一个或多个数字的单词。

在这个示例字符串中,我想删除单词mp3,因为它包含一个或多个数字。

因此,最终字符串如下所示:$string='möbel-jérôme-how';

我曾经这样做过:

$words = explode('-',$string);
$result = array();

foreach($words as $word) 
{
if( ($word ==preg_replace("([^a-z])", "-", $word)) && strlen($word)>2)  
$result[]=$word;
}
$string = implode(' ',$result);

现在这不起作用,因为它包含外来字符。

3 个答案:

答案 0 :(得分:2)

在PHP中,您可以访问Unicode属性:

$result = preg_replace('/[^\p{L}\p{N}-]+/u', '', $subject);

将为您执行第1步。 (\p{L}匹配任何Unicode字母,\p{N}匹配任何Unicode数字)。

删除带有数字的单词非常简单:

$result2 = preg_replace('/\b\w*\d\w*\b-?/', '', $result);

\b匹配单词的开头和结尾。)

答案 1 :(得分:2)

如果您实际上正在为链接做slug,我强烈建议您对unicode字符进行音译。您可以使用PHP's iconv来实现这一目标。


类似问题here。我认为,最高投票答案的独创性和简洁性非常好:)

答案 2 :(得分:0)

我建议分多步执行此操作:

  1. 创建一个允许字符串(所有这些字符串)并通过仅保留字符串来完成字符串。 (这需要一些时间,但这是一次性的事情)

  2. -上进行爆炸并浏览所有单词并仅保留不包含数字的单词。然后再次内爆。

  3. 我相信,你可以自己编写脚本。