2010-12-17 7 views
0
$gi = filter_var(filter_var($_POST['group_id'], FILTER_SANITIZE_STRING), 
     FILTER_VALIDATE_REGEXP, array(
      "options"=>array("regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/"))); 

これは私が使用しているコードです。これはPHP & MySQLアプリケーションです。問題は、5文字以下の任意の値でFALSEを返していることです。 '5'を '6'に変更すると、6文字以下の場合はFALSEが返されます。どうしてこれなの?RegExpが正しい文字数でfalseを返すのはなぜですか?

はまた、次のコードは、同じように動作します:

$gi = filter_var($_POST['group_id'], FILTER_VALIDATE_REGEXP, 
     array("options"=>array(
      "regexp"=>"/^[a-zA-Z0-9_](?=[^\s]+$).{5,20}$/"))); 

私は私の正規表現が1である印象の下だ)文字、数字、およびアンダースコアにエントリを制限する、2)空白を禁止する、および3)少なくとも5文字を必要とし、最大20文字を設定します。

答えて

2

あなたの正規表現に行く:

/^[a-zA-Z0-9_](?=[^\s]+$).{5,20} 

は5つの文字にマッチされるが、それは[a-zA-Z0-9_]以内に1つの文字にマッチした後にのみ、その後5文字までを入力します。ですから最低でも6文字の文字列が必要です。

あなたの最後の段落に基づいて、以下のようなものは、あなたが探しているものによります:

/^[0-9a-zA-Z_]{5,20}$/ 

はEDIT:まだなく、かなりの認知思考パターンにして、@Allanへの感謝を修正し、コーヒー奪取。 ;-)

+0

否定演算子 '^ 'は否定演算子ですか? AFAIK '^ \ w'は' \ W'と同じです – Machinarius

+0

最小長は7ではなく6です。 '(?= [^ \ s] + $)'は先読みなので、文字を消費しません。 –

+0

ありがとう、Brad。私が解決できなかったもう一つの小さな質問。正規表現を修正して特定の単語を禁止するにはどうすればよいですか?例えば。 QWERTY、または冒涜? – David

0
/.{5,20}/ 

このRegExの部分は、エンジンに最低5文字(任意の文字)と一致するように要求しています。それに応じてその部分を修正してください。申し訳ありませんが、質問の最後の部分を読んでいませんでし:

は、それが役立ちます:)

EDITを願っています。

1)間違っています。 ^演算子は正面にあるものを打ち消すので、最初の文字は数字でも数字でも構いません。[実際には過剰殺菌フィルタリングをしたい場合は/^[\w_]/と置き換えてください] 2)右。その行末の前に空白を入れることはできません。 3)かなり多くいただきましEDIT上記;)

以上の正規表現の情報についてはhttp://regular-expressions.info

関連する問題