【问题标题】:Replace spaces and remove non-word characters in single preg_replace() call在单个 preg_replace() 调用中替换空格并删除非单词字符
【发布时间】:2013-03-22 16:13:37
【问题描述】:

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

【问题讨论】:

  • 我不明白反对票的含义我问了一些我已经解决的问题,但我想要一个更好的方法来有效解决问题,但公众给出的反对票非常糟糕
  • @chriz 这么多反对票是什么意思我没有做过任何犯罪问了一个好问题
  • 明确地说,您只想保留字母数字字符和下划线(即“单词”字符)。您还想用下划线替换空格。在阅读代码之前,我将您的问题解释为“用下划线替换的字母数字小写字母和空格”,结果类似于_!@#$@#$^@#$_%#$_
  • 谁说我投票的事?!
  • 我认为有些人投了反对票,因为他们看到其他人投了反对票...

标签: php regex preg-replace


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多