私は正規表現でそのようなアマチュアです、どのようにこの正規表現のスペース(いくつに関係なく)を許可するのですか?私はハイフンの前にスペースを入れこの正規表現にスペースを入れる方法を教えてください。
if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;
私は正規表現でそのようなアマチュアです、どのようにこの正規表現のスペース(いくつに関係なく)を許可するのですか?私はハイフンの前にスペースを入れこの正規表現にスペースを入れる方法を教えてください。
if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE;
注意。スペースがハイフンの後にあった場合は、アンダースコアからスペースまでの文字範囲を指定します。 (。それを逃れるために、ハイフンの前にバックスラッシュを置くことでもevadable号)
これは何を「許可する」の意味があると仮定している:この正規表現は、文字列を検証するために使用されている、そしてそれ一致した場合 、文字列はは無効になります(したがってreturn FALSE
)です。したがって、無効化された文字クラス([^...]
)の文字は、実際にはであり、許容される文字はです。 (これは、この問題のいくつかの一般的な混乱を引き起こしている。)
あなただけのスペースを確保する必要がある場合は、任意の空白文字(スペース、タブ、改行)を許可する必要がある場合は、「/ /」
が必要になります - 使用 '/ \ sの/'
そして、あなたはあなたのパターンにスペースを追加する必要がある場合(スペースを無視することを意味します) - 使用/ [^ A-ZA-Z0-9_ \ - ]/
ありませんあなたの質問への答えは多すぎますが、checking regex expressionsに役立つサイトです。また、入力フィールドにカーソルを置くと、式の各部分が何を意味するのかについても説明します。
この'/[^A-Za-z0-9_-\s]/'
のような正規expretionで\s
は、あなたの質問は不明である
スペースを意味します。 $str
には、A-Za-z0-9_-
でない文字が含まれていると、正規表現はそのままで成功します。スペースはこれらの文字の1つではないので、正規表現は一致し、文全体はFALSE
を返します。
これはあなたが望むものではない、とあなたは正規表現が一致する場合$str
がA-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_ -
に変更すると、正規表現はabc123def
とabc123 def
の両方で一致しなくなり、FALSE
は返されません。
あなたは現在サプスを許可しています – Mchl
正規表現ですでにスペースが許されています。 – CanSpice
私は二重否定のために質問が混乱していると思います。正規表現でスペースを許可するか、全体的な条件でスペースを許可しますか? –