2011-01-25 11 views
6

私は正規表現でそのようなアマチュアです、どのようにこの正規表現のスペース(いくつに関係なく)を許可するのですか?私はハイフンの前にスペースを入れこの正規表現にスペースを入れる方法を教えてください。

if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE; 
+1

あなたは現在サプスを許可しています – Mchl

+1

正規表現ですでにスペースが許されています。 – CanSpice

+1

私は二重否定のために質問が混乱していると思います。正規表現でスペースを許可するか、全体的な条件でスペースを許可しますか? –

答えて

17
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE; 

注意。スペースがハイフンの後にあった場合は、アンダースコアからスペースまでの文字範囲を指定します。 (。それを逃れるために、ハイフンの前にバックスラッシュを置くことでもevadable号)

これは何を「許可する」の意味があると仮定している:この正規表現は、文字列を検証するために使用されている、そしてそれ一致した場合 、文字列はは無効になります(したがってreturn FALSE)です。したがって、無効化された文字クラス([^...])の文字は、実際にはであり、許容される文字はです。 (これは、この問題のいくつかの一般的な混乱を引き起こしている。)

1

あなただけのスペースを確保する必要がある場合は、任意の空白文字(スペース、タブ、改行)を許可する必要がある場合は、「/ /」

が必要になります - 使用 '/ \ sの/'

そして、あなたはあなたのパターンにスペースを追加する必要がある場合(スペースを無視することを意味します) - 使用/ [^ A-ZA-Z0-9_ \ - ]/

2

ありませんあなたの質問への答えは多すぎますが、checking regex expressionsに役立つサイトです。また、入力フィールドにカーソルを置くと、式の各部分が何を意味するのかについても説明します。

15

この'/[^A-Za-z0-9_-\s]/'
のような正規expretionで\sは、あなたの質問は不明である

2

スペースを意味します。 $strには、A-Za-z0-9_-でない文字が含まれていると、正規表現はそのままで成功します。スペースはこれらの文字の1つではないので、正規表現は一致し、文全体はFALSEを返します。

これはあなたが望むものではない、とあなたは正規表現が一致する場合$strA-Za-z0-9_-やスペースにない任意の文字を持っている場合、あなたは(アンダースコア間のスペースに注意A-Za-z0-9_ -にそれを変更する必要がありますハイフン)。したがって、文字列の文字がA-Za-z0-9_ -でない場合、正規表現は一致し、文はFALSEを返します。文字列が完全にA-Za-z0-9_ -である場合、正規表現は一致しないため、処理は次の行に進みます。

編集:ここでは例です:あなたの文字列がabc123defであれば、現在の正規表現が一致しなくなると、あなたはFALSEを返しません。文字列がabc123 defの場合、正規表現が一致し、文はFALSEを返します。文字クラスをA-Za-z0-9_ -に変更すると、正規表現はabc123defabc123 defの両方で一致しなくなり、FALSEは返されません。

関連する問題