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

У меня есть форма инпута куда попадают номера телефонов от пользователя, необходимо создать валидацию номера при нажатии на 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']); ?>

Буду очень признателен если поможете мне с этим разобраться или дадите рекомендации как это можно лучше реализовать, а то я сомневаюсь, что регулярка это правильный способ решения, заранее большое спасибо всем!


Ответы (0 шт):