линия

Главная

четверг, 16 июня 2022 г.

Lravel - как я писал тестовое задание (валидация номера телефона)

 Процесс поиска работы утомительна и но в тоже время весьма полезна. Проходишь техническое собеседование, тебя не берут, читаешь теорию, запоминаешь, еще раз проходишь техническое собеседование, тебя не берут и  так по несколько раз. И уже на десятом собеседование ты ловко приводишь примеры для SOLID ,  рассказываешь об отличиях подсистем хранения, философствуешь о индексах насущных.  И тебя берут на работу, но просят выполнить маленькое тесовое задание.  Само тестовое задание для бывалых программистов не интересна, но один момент был тяжелым и посему решил про это написать...



Ссылка на проект в гитхабе https://github.com/deen8122/phone-book-laravel   


В задании было такое условие: "Пользователь может вводить номер телефона в трёх форматах: +79991235678, +7(999)123-56-78, 89991235678. При сохранении телефон должен приводиться к общему формату 89991235678 и возвращаться в таком формате из базы."

То есть, пользователь может вводить номера в трех форматах. И все это дело нужно грамотно отвалидировать в ревест классе, используя стандартные правила валидации. 

Долго не думая  накидал такую валидацию:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?
public function rules() {
		return [
            'name'=>'required|string',
            /*
             * Пользователь может вводить номер телефона в трёх форматах: +79991235678, +7(999)123-56-78, 89991235678
             */
            'phone' => 'required|regex:/(\+7[0-9]{10}$)|(8[0-9]{10}$)|(\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}$)/',
            'description' => 'nullable|string|max:400',
            'image' => 'nullable|image',

		];
	}



По идее должно работать, регулярка написана правильно, но была ошибка: не правильное регулярное выражение. (Точно не помню.)

Как оказалось , если в регулрном выражении используется знак "|" то нужно передавать правила как массив. И это написано в документации. (тут фейспалм) 

Быстренько переделываю:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?
public function rules() {
		return [
            'name'=>'required|string',
            /*
             * Пользователь может вводить номер телефона в трёх форматах: +79991235678, +7(999)123-56-78, 89991235678
             */
            'phone' =>  ['required', 'regex:/(\+7[0-9]{10}$)|(8[0-9]{10}$)|(\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}$)/'],
            'description' => 'nullable|string|max:400',
            'image' => 'nullable|image',

		];
	}


И все рааботает как надо.






Комментариев нет:

Отправить комментарий