正则表达式 - preg_replace字符串

时间:2011-06-20 12:27:34

标签: php regex preg-replace

我想将字符串的非字母数字字符替换为空格。

我用过 $title= preg_replace("/[^a-zA-Z0-9\s]/", " ", $title);

所以当用户输入

  

ABC!?d $

它将是

  

abc d

但是由于用户将其输入到文本输入,它会转到“x.php?title = abc!?d $”。 我想要它去“x.php?title = abc + d” 因为我想要“abc d”,“abc $$$$$$$$$ d”,“abc __。!d”等去同一个网址。 我怎么能管理这个。谢谢。

3 个答案:

答案 0 :(得分:6)

基本上,你所说的是,如果彼此相邻的可替换字符不止一个,那么你只想在那里放一个空格字符。是吗?

在这种情况下,是的,这很容易:你只需要在正则表达式中的字符类之后添加一个加号,如下所示:

$title = preg_replace("/[^a-zA-Z0-9\s]+/", " ", $title);

加号告诉正则表达式寻找前一项的一个或多个匹配。

希望有所帮助。

答案 1 :(得分:0)

要摆脱不需要的字符,请使用以下代码:

$_GET['title'] = 'abc__.!d';

$title = preg_replace('/[^a-zA-Z0-9\s]+/', ' ', $_GET['title']); // "abc d"

现在,只需重定向到正确的网址(如果需要)

if ($_GET['title'] != $title) {
    header('Location: ....');
    die('Redirect to ...URL...');
}

答案 2 :(得分:0)

您是否尝试过\W开关来匹配非aplha字符? (与+

一起使用
$title= preg_replace(/\W+/g, " ", $title);

(在JavaScript中你也需要/g标志,不确定这是否适用于PHP)

编辑:

该要求规定应删除所有_,因此以下方法可行。

(\W|_)+

但是,最好在这个实例中规定你想要的确切字符,而不是试图建立一个排除列表,就像我的asnwer开始那样。