2

私はこのPHP正規表現を持っています:

$username = preg_replace('/[^a-z0-9]/i', '', $username);

A-Zとのみが許可されます0-9。を許可する.にはどうすればよいですか?-_

4

7 に答える 7

9

次の正規表現を使用できます。

/[^a-z0-9._-]/i
  • 最後の i は、パターン マッチングで大文字と小文字を区別しないようにすることです。ドロップして使用できます:/[^a-zA-Z0-9._-]/
  • -(ハイフン) は、両側で囲まれている場合、char クラスで特別な意味を持つため、文字どおりに処理されるように最後に配置します。次のこともできます:/[^a-z0-9.\-_]/ハイフンをエスケープしている場所
  • char クラスのドットはメタ文字ではないため、文字どおりに扱われ、エスケープする必要はありません。
于 2010-03-01T09:38:37.137 に答える
2

簡単です。これらの文字も正規表現に追加するだけです

$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)

。「マッチオール」文字であるため、エスケープする必要があります。そうしないと、範囲を定義するために使用されるためです(もちろん、エスケープすることもできます)。

于 2010-03-01T09:40:59.597 に答える
1
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

( ) グループの文字の 1 つではないものをすべて削除します。[^]ハイパーンは最後のものであるため、特別な意味を失うことに注意してください。

于 2010-03-01T09:37:54.580 に答える
1

何を照合する必要があるかが正確にわかっている場合は、文字グループで指定するだけです。ダッシュは、最初または最後にある必要があります。

/[A-Z0-9._-]/
于 2010-03-01T09:38:18.240 に答える
1
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

現在のコードでは、実際にはA-Za-zの両方が許可iされています。フラグは、正規表現を大文字と小文字を区別しないものとしてマークします。

于 2010-03-01T09:38:25.400 に答える
0
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
于 2010-03-01T09:38:37.007 に答える
0

試す

$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);
于 2010-03-01T09:39:34.157 に答える