在单个preg_replace()调用中替换空格并删除非单词字符

时间:2013-03-22 16:13:38

标签: php regex preg-replace

我有这个代码可以做我想要的,但分四个步骤。我只想要字母数字小写字母,空格应该用下划线替换。我已经编写了这个函数,但想知道是否可以通过一个preg_replace()函数调用:

      $str = 'qwerty!@#$@#$^@#$Hello %#$sdsdsss';
      $cityu= strtolower($str);
     $id = str_replace(' ', '_', $cityu);
      $outcome = preg_replace("/[^a-zA-Z0-9_]/", "", $id);

       var_dump($outcome);

我想要一个preg_replace()来做这件事。

1 个答案:

答案 0 :(得分:1)

您不能使用单个替换字符串,因为您正在执行两个不同的操作,但preg_replace()可以将数组作为参数。这允许您在单个preg_replace()调用中创建多组替换。

$str = strtolower('qwerty!@#$@#$^@#$Hello %#$sdsdsss');
echo preg_replace(array('/ /', '/\W/'), array('_', ''), $str);

// output:  qwertyhello_sdsdsss

\W是一个否定的简写character class,相当于[^A-Za-z0-9_]


请注意,替换订单很重要。替换将按其列出的顺序进行,因此您将以相反的顺序获得不同的结果:首先替换非单词字符,然后替换空格,但在第一步中已经删除了空格。

echo preg_replace(array('/\W/', '/ /'), array('', '_'), $str);

// output:  qwertyhellosdsdsss