2012-06-12 28 views
11

Estoy practicando mis habilidades de principiante php y me gustaría saber por qué este script siempre devuelve FALSO?filter_var usando FILTER_VALIDATE_REGEXP

¿Qué estoy haciendo mal?

$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

Cuando uso preg_match() en su lugar funciona bien ... – Iris

+0

preg_match() requeriría que use un filtro de devolución de llamada. Si desea utilizar el mecanismo de filtro de PHP (que funciona de forma un poco diferente que usar superglobales), simplemente cree una matriz asociativa como en los ejemplos del manual. –

Respuesta

18

Como recuerdo, la expresión regular debería estar en una matriz de opciones.

$ string = "Coincidir con esta cadena";

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

Además, el

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

SHAUD ser bastante

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

o

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

porque con la primera versión Creo que coinciden sólo cadenas de un solo carácter

+1

¿De verdad? Eso no está muy claro en la documentación en el manual php: -/ Gracias también por los consejos de expresiones regulares :) Voy a jugar un poco con esto un poco. – Iris

+0

Para expresiones regulares en general, y en PHP, puede consultar: http://www.regular-expressions.info/tutorial.html y http://www.regular-expressions.info/php. html este sitio me ayudó mucho. – Cranio

+0

Gracias! y el código funciona ahora después de agregar la matriz. – Iris