Filter_var с использованием FILTER_VALIDATE_REGEXP

Я тренирую свои навыки начинающего php и хотел бы знать, почему этот script всегда возвращает FALSE?

Что я делаю неправильно?

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

$value = 'john';

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

Ответ 1

Регулярное выражение должно быть в массиве параметров.

$string = "Match this 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

потому что с первой версией я думаю, что вы соответствуете только односимвольных строк

Ответ 2

Может ли кто-нибудь объяснить следующую функцию

function filterName ($ field) {

$field=filter_var(trim($field),FILTER_SANITIZE_STRING);

if(filter_var($field,FILTER_VALIDATE_REGEXP,
array("options"=>array("regexp"=>"/[a-zA-Z\s]+$/"))))
{
    return $field;
}
else
{
    return false;
}

}