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. A ~ Z または 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 です!

于 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 に答える