2012-06-12 13 views
11

Ćwiczę moje php początkowe umiejętności i chciałbym wiedzieć, dlaczego ten skrypt zawsze zwraca FALSE?filter_var za pomocą FILTER_VALIDATE_REGEXP

Co robię źle?

$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

Kiedy używam preg_match() zamiast tego działa dobrze ... – Iris

+0

preg_match() wymagałby użycia filtru zwrotnego. Jeśli chcesz użyć mechanizmu filtrowania PHP (który działa nieco inaczej niż przy użyciu superglobałów), po prostu utwórz tablicę asocjacyjną, tak jak w przykładach ręcznych. –

Odpowiedz

18

Jak pamiętam, wyrażenie regularne powinno znajdować się w tablicy opcji.

$ string = "Dopasuj ten ciąg";

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

Również

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

Powinni być raczej

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

lub

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

bo z pierwszej wersji myślę, że pasuje tylko ciągi jednoznakowe

+1

Naprawdę? Z dokumentacji w podręczniku php nie wynika to jednoznacznie: -/ Dziękuję również za wskazówki dotyczące regexu :) Będę się tym trochę zajmował. – Iris

+0

W przypadku wyrażeń regularnych w ogóle, a także w PHP, możesz rzucić okiem na: http://www.regular-expressions.info/tutorial.html i http://www.regular-expressions.info/php. html Ta strona bardzo mi pomogła. – Cranio

+0

Dzięki! a kod działa teraz po dodaniu tablicy. – Iris