yaleksandr89
@yaleksandr89
PHP developer

Что я указываю неправильно в функции filter_var(..., FILTER_VALIDATE_REGEXP, ...)?

Здравствуйте.
Раньше для проверки введенного в поле формы телефона использовал:
if (!preg_match('/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/', $phone)) { 
    echo "Телефон задан в неверном формате!"; 
}


Сейчас наткнулся на функцию filter_var. И собственно возник вопрос с фильтром FILTER_VALIDATE_REGEXP.
Для проверки телефона нет готового фильтра, соответственно пытаюсь указать третьим параметром регулярку и функция отрабатывает не не работает, выкидывает warning
) Warning: filter_var(): 'regexp' option missing in W:\Server\data\htdocs\virthosts\ajax\handler-form.php on line 17

Вот какие варианты передачи третьего аргумента я пробовал
1:
elseif (!filter_var($phone, FILTER_VALIDATE_REGEXP, '/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/')) {
        echo 'Телефон задан в неверном формате!';
    }

2:
define('CHECK_NUMBER_PHONE', '/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/');

elseif (!filter_var($phone, FILTER_VALIDATE_REGEXP, CHECK_NUMBER_PHONE)) {
        echo 'Телефон задан в неверном формате!';
    }

3:
$option = [
    'options' => [
        'regexp' => '/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/'
    ]
];
elseif (!filter_var($phone, FILTER_VALIDATE_REGEXP, ['options'=>'regexp'])) {
        echo 'Телефон задан в неверном формате!';
    }


Подскажите, что я делаю не так? Хотелось бы полноценно перевести валидацию форм на эту функцию, только вот затык с фильтром FILTER_VALIDATE_REGEXP.
  • Вопрос задан
  • 252 просмотра
Решения вопроса 2
Konata69lol
@Konata69lol
backend developer (php/go)
Вот так указывается регулярка.

filter_var(
        $string, 
        FILTER_VALIDATE_REGEXP,
        [
             "options" =>["regexp"=>"/^M(.*)/"]
        ]
    )
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
<?php
    
    $string = '+79618026561';
    
    $check = filter_var( $string, FILTER_VALIDATE_REGEXP, [
            "options" => ["regexp"=>"/^(\s*)?(\+)?([- _():=+]?\d[- _():=+]?){10,14}(\s*)?$/"],
        ]
    );

    if (!$check){
        echo 'Телефон задан в неверном формате!';
    }
    else{
        echo 'Телефон задан в верном формате.';
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы