2012-06-12 20 views
11

私は初心者のPHPスキルを練習していますが、なぜこのスクリプトが常にFALSEを返すのかを知りたいですか?filter_var using FILTER_VALIDATE_REGEXP

私は間違っていますか?

$namefields = '/[a-zA-Z\s]/'; 

$value = 'john'; 

if (!filter_var($value,FILTER_VALIDATE_REGEXP,$namefields)){ 
    $message = 'wrong'; 
    echo $message; 
}else{ 
    $message = 'correct'; 
    echo $message; 
} 
+0

代わりにpreg_match()を使用すると、正常に動作します。 – Iris

+0

preg_match()では、コールバックフィルタを使用する必要があります。 PHPフィルタメカニズム(スーパーグローバルを使うのとは少し違って動作します)を使いたい場合は、マニュアルの例のような連想配列を作成してください。 –

答えて

18

私が思い出すとおり、正規表現はオプション配列にする必要があります。

$ string = "この文字列と一致する";最初のバージョンで、私はあなただけの単一の文字列に一致すると思うので

var_dump(
    filter_var(
     $string, 
     FILTER_VALIDATE_REGEXP, 
     array(
      "options" => array("regexp"=>"/^M(.*)/") 
     ) 
    ) 
); // <-- look here 

また、

$namefields = '/[a-zA-Z\s]/'; 

はむしろ

$namefields = '/[a-zA-Z\s]*/'; // alpha, space or empty string 

または

$namefields = '/[a-zA-Z\s]+/'; // alpha or spaces, at least 1 char 

ことshoud

+1

本当ですか?これは、PHPマニュアルのドキュメントからはっきりとは分かりません。 -/ 正規表現のヒントもありがとうございました:)私はこれをちょっと試してみます。 – Iris

+0

一般的な正規表現やPHPについては、 http://www.regular-expressions.info/tutorial.htmlと http://www.regular-expressions.info/phpをご覧ください。 html このサイトは私を助けました。 – Cranio

+0

ありがとう!配列を追加した後にコードが動作します。 – Iris