-4

我有这个代码可以做我想做的事,但分四个步骤。我只想要字母数字小写字母,并且空格应替换为下划线。我已经编写了这个函数,但想了解一个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()这样做。

4

1 回答 1

1

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

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

// output:  qwertyhello_sdsdsss

\W是一个否定的速记字符类,它等价于[^A-Za-z0-9_].


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

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

// output:  qwertyhellosdsdsss
于 2013-03-22T16:39:02.017 回答