5

英数字とスペースのみを許可したいので、次を使用します。

$name = preg_replace('/[^a-zA-z0-9 ]/', '', $str);

ただし、それは私が望まないアンダースコア「_」を許可しています。これはなぜですか、どうすれば修正できますか?

ありがとう

4

2 に答える 2

1

文字クラスの範囲は、2 つのコード ポイント間の文字の範囲です。文字_は rangeA-zに含まれており、これは ASCII テーブルを見るとわかります。

... YZ [ \ ] ^ _ ` ab ...

したがって、通過するのはアンダースコアだけではなく、ドキュメントに記載されているように、上記の他の文字も使用できます。

範囲は ASCII 照合シーケンスで動作します。... たとえば、`[W-c]と同等です。[][\^_wxyzabc]

これが起こらないようにするために、文字クラスの単一の文字範囲で大文字と小文字を区別しない一致を実行できます。

$name = preg_replace('/[^a-z0-9 ]/i', '', $str);
于 2013-06-11T23:59:29.360 に答える