2012-06-12 24 views
11

Mi sto esercitando nelle mie competenze di php per principianti e vorrei sapere perché questo script restituisce sempre FALSE?filter_var using FILTER_VALIDATE_REGEXP

Cosa sto sbagliando?

$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

Quando uso preg_match() invece funziona bene ... – Iris

+0

preg_match() richiederebbe l'uso di un filtro di callback. Se si desidera utilizzare il meccanismo di filtro PHP (che funziona in modo leggermente diverso rispetto all'utilizzo di superglobali), è sufficiente creare un array associativo come negli esempi manuali. –

risposta

18

Come ricordo, il regexp dovrebbe essere in una matrice di opzioni.

$ string = "Abbina questa stringa";

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

Inoltre, il

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

shoud essere piuttosto

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

o

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

perché con la prima versione penso che si abbinano solo le stringhe di un solo carattere

+1

Davvero? Questo non è molto chiaro dalla documentazione nel manuale php: -/ Grazie anche per i consigli di regex :) Mi giro un po 'con questo. – Iris

+0

Per le espressioni regolari in generale e in PHP, è possibile dare un'occhiata a: http://www.regular-expressions.info/tutorial.html e http://www.regular-expressions.info/php. html questo sito mi ha aiutato molto. – Cranio

+0

Grazie! e il codice funziona ora dopo aver aggiunto la matrice. – Iris