2009-07-24 69 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); 

運作的?