preg_replace - 留下不需要的字符

时间:2009-07-24 18:05:03

标签: php preg-replace

我有一个字符串:

$string = "Hello World!";

我想把它变成一个URL友好的标签,我已经开发了一个功能来实现它:

function stripJunk($string){
    $string = str_replace(" ", "-", $string);
    $string = preg_replace("/[^a-zA-Z]\s/", "", $string);
    $string = strtolower($string);
    return $string;
}

但是,当我通过上面的$string运行时,我会得到以下内容:

$string = "hello-world!";

似乎有些人物在我的preg_replace中滑落,即使根据我的理解,他们也不应该这样。

它应该是这样的:

$string = "hello-world";

这里发生了什么? (这应该是轻松的柠檬吱吱!)

编辑1 :我不知道正则表达式是初学者的东西,但无论如何。此外,删除我的字符串中的\ s不会产生所需的结果。

期望的结果是:

  1. 所有空格都转换为破折号。
  2. 删除所有非A-Z或0-9的剩余字符。
  3. 然后将字符串转换为小写字母。
  4. 编辑2 + :稍微清理一下我的代码。

4 个答案:

答案 0 :(得分:5)

以下对我来说很合适:

function stripJunk($string){
    $string = str_replace(" ", "-", trim($string));
    $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
    $string = strtolower($string);
    return $string;
}

答案 1 :(得分:3)

模式末尾的\ s表示您只会替换紧跟空格字符的非字母字符。您可能希望在方括号内使用\ s,以便保留空格,以后可以用短划线替换。

如果您还想允许数字,则需要在方括号内添加0-9。

例如:

<?php

$string = "Hello World!";

function stripJunk($string){
    $string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
    $string = str_replace(" ", "-", $string);
    $string = strtolower($string);
    return $string;
}

echo stripJunk($string);

答案 2 :(得分:1)

您可以在一行中使用一些正则表达式来删除垃圾:

<?php

function strip_junk ($string) {

  // first, strip whitespace; and replace every non-alphabetic character by a dash
  $string = preg_replace("/[^a-z0-9-]/u", "-", strtolower(trim($string)));

  // second, remove double dashes
  $string = preg_replace("/-+/u", "-", $string);

  // finally, remove leading and trailing dashes
  $string = preg_replace("/^-*|-*$/u", "", $string);

  return $string;

}

?>

这应该可以解决问题,快乐的PHP!

答案 3 :(得分:0)

这个怎么样?

preg_replace("/[.\n\r][^a-zA-Z]/", "", $string);

如果不起作用:

preg_replace("/[.\n\r^a-zA-Z]/", "", $string);

这有用吗?