0

リンクのタイトルを準備するためにこのコードを作成しましたが、少しかさばると思います。正規表現をよく理解している人が、次の関数を減らすことができるかどうか疑問に思っています(関連するpreg_replacesをマージすることによって)。現在のすべてのハイフンを削除し、複数のスペースを削除し、スペース置換ハイフンを除いて英数字のみであることを確認し、すべてのスペースを単一のハイフンに置き換え、文字列がハイフンで始まらないようにする必要があります。

function prepareURLTitle($title)
{

return preg_replace("/\A-/", "", str_replace(" ", "-", preg_replace("/[^a-zA-Z0-9\s]/", "", preg_replace('/\s\s+/', ' ', preg_replace('/\s?-/', '', $title)))));

}

入力とその出力の例:

入力:

真新しい-手袋、2パック//ここには複数のスペースがありますが、ブロッククォートではそれらを表示できません

出力:

真新しい-手袋-2パック

4

4 に答える 4

3
trim(preg_replace('`[^a-z0-9]+`i','-',str_replace("'",'',$title)),'-')

また、引用符を何も置き換えていないので、"The cat's meow" のような文字列は "The-cat-s-meow" になりません。

于 2012-05-23T15:52:12.760 に答える
2
function prepareURLTitle($title)
{
   return preg_replace("[^A-Za-z0-9]+", "-", $title);
}

これは機能するはずです。複数の英数字以外の文字を単一の「-」に置き換える必要があります。

于 2012-05-23T15:59:04.103 に答える
1
preg_replace('~[^a-z\d]+~i','-',preg_replace('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','$1',$title));
// or
preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title);

例を挙げると…</p>

$title = '  BRAND   NEW -   Gloves, 2 pack -  ';
echo preg_replace(array('~^[^a-z\d]+(.*?)[^a-z\d]+$~i','~[^a-z\d]+~i'),array('$1','-'),$title);

戻ります

BRAND-NEW-Gloves-2 パック

于 2012-05-23T16:00:10.820 に答える
-1
function prepareURLTitle($title)
{
   return preg_replace( "/[^a-zA-Z0-9]/", "-",str_replace("-", "",  $title));
}

デモ: http://codepad.org/lPSQQBys

出力:

真新しい--手袋--2 パック

于 2012-05-23T15:51:44.040 に答える