@hollanditkzn

Как сделать валидацию для формата телефона?

Есть виджет по маске MaskedInput, только проблема в том, что валидацию она не проходит
Client.php
public function rules()
    {
        return [
            [['name', 'phone'], 'required', 'on' => self::SCENARIO_DEFAULT],
            [['phone'], 'number'],
            [['phone'], 'filter', 'filter' => function($value){
                return str_replace(['(', ')', '-'], '', $value);
            }],
            [['phone'], 'unique'],
        ];
    }

И во вьюшке
<?= $form->field($model, 'phone')->widget(MaskedInput::className(),[
        'mask' => '8(999)999-99-99',
    ]) ?>

Если по документации следовать то там массив можно применять, но почему то всегда выходит валидация, что телефон должен быть целым числом
В базе данных тип decimal
  • Вопрос задан
  • 4386 просмотров
Решения вопроса 1
@hollanditkzn Автор вопроса
Я немного по другому сделал. В базе данных сделал как строка и валидацию сделал сделал по регулярному выражение
[['phone'], 'string'],
            ['phone', 'match', 'pattern' => '/^(8)[(](\d{3})[)](\d{3})[-](\d{2})[-](\d{2})/', 'message' => 'Телефона, должно быть в формате 8(XXX)XXX-XX-XX'],
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Добрый день!
Уже в нескольких проектах использую https://github.com/udokmeci/yii2-phone-validator.
Кроме валидации телефона, также может форматировать введенный номер под выбранный формат, таким образом чтоб все номер в БД хранились в одном виде.
Ответ написан
Ваш ответ на вопрос

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

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