0

ユーザー入力文字列を変換したい

「何か...un//重要な、、、のように-これ」

「これのような重要ではない何か」

したがって、基本的に、「-」を含むすべての繰り返し特殊文字を削除します。私はグーグルしてこれに来ました

preg_replace('/[-]+/', '-', preg_replace('/[^a-zA-Z0-9_-]/s', '-', strtolower($string)));

これが単一のpreg_replace()で実行できるかどうか知りたいです。

わかりやすくするために、すべての特殊文字と空白スペースをハイフン(-)に置き換えます。より多くのオカレンスが連続して表示される場合は、それらを単一のハイフンに置き換えます

私のソリューションは私が望むように完全に機能しますが、私は1回の呼び出しで同じことをしたいと思っています

4

2 に答える 2

3

昨日も同様の質問がありましたが、手元にありません。

現在の最初のパターンでは:

[^a-zA-Z0-9_-]

あなたはただ一つのキャラクターを探しています。1つ以上の貪欲な一致を作成すると、正規表現エンジンはこれらの複数を1つに自動的に置き換えます。

[^a-zA-Z0-9_-]+
              ^- + = one or more

それでも-、文字列内に存在するものがキャッチされないという問題があるため、「not-in」文字クラスからそれらを削除する必要があります。

[^a-zA-Z0-9_]+

これはそれからそれをするべきです:

preg_replace('/[^a-zA-Z0-9_]+/s', '-', strtolower($string));

そして、それは小文字だけなので、あなたも探す必要はありませんA-Z、ただ別の削減:

preg_replace('/[^a-z0-9_]+/s', '-', strtolower($string));

Repetition および/またはQuantifiersも参照して+ください(Repetition Docs; Repetition with Star and Plus regular-expressions.info) 。

また、修飾子Docsを見ると、s (PCRE_DOTALL)修飾子は必要ないことがわかります。

$urlSlug = preg_replace('/[^a-z0-9_]+/', '-', strtolower($string));

これがあなたが使用している正規表現について少し説明し、また常に役立つさらなるドキュメントを見つけることができる場所について少し説明してくれることを願っています。

于 2012-09-29T07:19:49.193 に答える
0

これを試して:

preg_replace('/[^a-zA-Z0-9_-]+/s', '-', strtolower($string));
于 2012-09-29T07:19:38.653 に答える