0

我有一个字符串:

$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. 所有剩余的不是 AZ 或 0-9 的字符都将被删除。
  3. 然后将字符串转换为小写。

编辑 2+:稍微清理了我的代码。

4

4 回答 4

5

以下对我来说很好:

function stripJunk($string){
    $string = str_replace(" ", "-", trim($string));
    $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
    $string = strtolower($string);
    return $string;
}
于 2009-07-24T18:19:29.297 回答
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);
于 2009-07-24T18:06:55.000 回答
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'ing!

于 2009-07-24T18:10:58.207 回答
0

那这个呢?

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

如果这不起作用:

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

那样有用吗?

于 2009-07-24T18:16:25.233 回答