2009-07-24 68 views
0

我有一个字符串:的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!"; 

似乎有CHARACT即使从我所了解的情况来看,他们也不应该这样做。

应该这样写:

$string = "hello-world"; 

这是怎么回事? (这应该是容易peasy柠檬squeasy!)

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

期望的结果是:

  1. 所有空间被转换为短划线。
  2. 删除所有不是A-Z或0-9的其余字符。
  3. 该字符串然后转换为小写。

编辑2+:清理了我的代码只是一点。

+0

你的代码变得毫无意义。所有空格在第一步被替换,因此`str_replace`什么都不做。 – SilentGhost 2009-07-24 18:20:35

+0

我认为编辑这个问题很难,所以原来的问题被删除了。它使以前有用的答案看起来很愚蠢 – 2009-07-24 18:27:07

+0

我与preg_replace有问题。我没有改变我使用的数学陈述。查看修订历史记录 - 我从一开始就使用的匹配语句保持不变。我改变了代码,原因有几个:1)我想专注于我遇到的问题,2)不要关注我有点疲惫,并且做出了一个愚蠢的booboo,并且把事情放在错误顺序上(无论如何都会被纠正)。 – EvilChookie 2009-07-24 18:34:08

回答

5

下面的作品就好了对我说:

function stripJunk($string){ 
    $string = str_replace(" ", "-", trim($string)); 
    $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string); 
    $string = strtolower($string); 
    return $string; 
} 
在目前的形式
3

模式结束处的\意味着您将只替换非字母字符,后面紧跟着一个空格字符。您可能希望\方括号内的\,以便空白也被保留下来,并可以在稍后用短划线代替。

如果您还想允许数字,您需要在方括号内添加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); 
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!

0

这是怎么回事?

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

如果不工作:

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

运作的?