PHP preg_replace匹配特殊字符但不匹配utf8字母

时间:2013-02-04 20:07:58

标签: php regex unicode utf-8 ascii

我有一些标题,例如:

should? be fenêtre!

ﻟﻔﺮﻧﺴﻴﺔ-تعاني!!!

我可以使用什么正则表达式来删除特殊字符,例如:?,!,^

我需要获得这样的标题:

should-be-fenêtre

ﻟﻔﺮﻧﺴﻴﺔ-تعاني

我试过

$name = preg_replace("~[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+~", "-", $name);

但是我得到了

Warning: preg_replace(): No ending delimiter '~' found in

由于

2 个答案:

答案 0 :(得分:3)

您可以使用几个正则表达式去除任何不是字母或数字的内容,并将空格和短划线的运行压缩为一个短划线:

// Replaces every non-letter, non-digit with a dash
$str = preg_replace('/(?=\P{Nd})\P{L}/u', '-', $str);

// Replaces runs of whitespace and dashes with a single dash
$str = preg_replace('/[\s-]{2,}/u', '-', $str);

答案 1 :(得分:0)

试试这个:

$text = preg_replace("/(?![.=$'€%-])\p{P}/u", "", $text);

只需更改断言以匹配您要保留的任何Unicode字符。