Как создать функцию валидации номера телефона в зависимости от страны?
У меня есть форма инпута куда попадают номера телефонов от пользователя, необходимо создать валидацию номера при нажатии на submit button на php не используя JS, принял решение делать регуляркой, создал массив с паттернами, подскажите пожалуйста как грамотно сделать валидацию данных которые вводит пользователь и в зависимости от выбранной страны не пропускать не корректные номера по типу "+1111111" "0000000", вот некоторые наброски:
public function validateMember($model, $attribute) {
$pattern = [
'United States' => '~^(\(\+)?\b(1)?([0-9]{10})$~',
'Australia' => '~^(\(\+)?\b(61)?([0-9]{9})$~',
'Belarus' => '~^(\(\+)?\b(375)?([0-9]{9})$~',
'Czech Republic' => '~^(\(\+)?\b(420)?([0-9]{9})$~',
'Germany' => '~^(\(\+)?\b(49)?([0-9]{10})$~',
'Israel' => '~^(\(\+)?\b(972)?([0-9]{9})$~',
'Kazakhstan' => '~^(\(\+)?\b(7)?([0-9]{10})$~',
'Kyrgyzstan' => '~^(\(\+)?\b(996)?([0-9]{9})$~',
'Poland' => '~^(\(\+)?\b(48)?([0-9]{9})$~',
'Romania' => '~^(\(\+)?\b(40)?([0-9]{9})$~',
'Russia' => '~^(\(\+)?\b(7)?([0-9]{10})$~',
'Slovakia' => '~^(\(\+)?\b(421)?([0-9]{9})$~',
'Thailand' => '~^(\(\+)?\b(66)?([0-9]{9})$~',
'Ukraine' => '~^(\(\+)?\b(380)?([0-9]{9})$~',
'Uzbekistan' => '~^(\(\+)?\b(998)?([0-9]{9})$~'
];
$tel = $model->$attribute;
$isValid = false;
foreach ($pattern as $country => $regex) {
if (preg_match($regex, $tel)) {
$isValid = true;
break;
}
}
return $isValid;
}
Форма на сайте:
<?= $form->field($model, 'phone', ['options' => ['class' => 'form-group form-phone']])->input('tel', ['class' => 'form-control', 'id' => 'phone-form']); ?>
Буду очень признателен если поможете мне с этим разобраться или дадите рекомендации как это можно лучше реализовать, а то я сомневаюсь, что регулярка это правильный способ решения, заранее большое спасибо всем!