2009-07-24 7 views
0

不要な文字に残し、私は文字列を持っている:私はURL友好タグにそれを回すにしたい、と私はそれを行うための機能を開発しましたにpreg_replace -

$string = "Hello World!"; 

を:

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があるようですたとえ私が理解しているものであっても、彼らは私のpreg_replaceを滑り落ちます。

それはこのようにお読みください:ここで何が起こっている

$string = "hello-world"; 

編集1:私は正規表現は初心者のものだと認識していませんでしたが、何でも構いません。さらに、文字列内の\ sを削除しても、目的の結果は得られません。

所望の結果である:

  1. すべてのスペースをダッシュ​​に変換されます。
  2. A-Zまたは0-9以外の残りの文字はすべて削除されます。
  3. 文字列を小文字に変換します。

編集2+:自分のコードをちょっときれいにしました。

+0

あなたのコードはほとんど意味がありません。すべてのスペースは最初のステップで置き換えられます。したがって、 'str_replace'は何もしません。 – SilentGhost

+0

私はそれが元の問題が削除されるように質問を厳しい編集だと思う。それ以前の有用な答えが愚かに見える –

+0

私がpreg_replaceで持っていた問題。私は私が使用したmathcingステートメントを変更しませんでした。改訂履歴を見てください。私が最初から使用していた一致する文は変更されませんでした。私はいくつかの理由からコードを変更しました:1)私が持っていた問題に集中したいと思っていました.2)私はちょっとぼんやりしていて、愚かなおっぱいをして、 (これはとにかく訂正されているでしょう)。 – EvilChookie

答えて

5

次作品:あなたの現在の形で

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

私はフレンドリーです。元のコードと何が違うか全く分かりません。唯一の違いは、一致する文字列に " - "を追加していることです。これはうまくいきましたが、私が試した他のソリューションと比較して、それがなぜ機能しているのかは分かりません。乾杯! – EvilChookie

+0

あなたがしていたこと:**すべての**非文字を削除し、文字列を小文字に変換してください。 '!'の後にスペースがなかったので、変更前のコードは機能しませんでした。 – SilentGhost

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); 
+0

\ sを削除すると、文字列の感嘆符が残ります。 – EvilChookie

+0

本当ですか?私はそれを再現できません –

+0

うん。確定。感嘆符はまだ文字列に表示されています。 – EvilChookie

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); 

は、その仕事をしていますか?私にはうまく

+0

どちらもうまくいきませんでした、申し訳ありません。 2番目のものは、すべてを削除するようになっていますが、感嘆符が付いています! – EvilChookie

+0

これは? /[^ a-zA-Z]!/ –