@Belib0v
Осторожно, новичок

Как лучше сделать валидацию?

Доброго времени суток, у меня есть валидация по регулярке:
(PHP)
public function validatePhone($phone, $country): bool
    {
        $patterns = [
            'us' => '~^(\+)?1?[0-9]{10}$~',
            'au' => '~^(\+)?61?[0-9]{9}$~',
            'by' => '~^(\+)?375?[0-9]{9}$~',
            'cz' => '~^(\+)?420?[0-9]{9}$~',
            'de' => '~^(\+)?49?[0-9]{10}$~',
            'il' => '~^(\+)?972?[0-9]{9}$~',
            'kz' => '~^(\+)?7?[0-9]{10}$~',
            'kg' => '~^(\+)?996?[0-9]{9}$~',
            'pl' => '~^(\+)?48?[0-9]{9}$~',
            'ro' => '~^(\+)?40?[0-9]{9}$~',
            'ru' => '~^(\+)?7?[0-9]{10}$~',
            'sk' => '~^(\+)?421?[0-9]{9}$~',
            'th' => '~^(\+)?66?[0-9]{9}$~',
            'ua' => '~^(\+)?380[0-9]{9}$~',
            'uz' => '~^(\+)?998?[0-9]{9}$~'
        ];

        if (isset($patterns[$country])) {
            return (bool)preg_match($patterns[$country], $phone);
        } else {
            return false;
        }
    }

(Javascript)
$("#phoneinput").on('countrychange', function () {
        const country = window.iti.getSelectedCountryData().iso2;
        const input = $('input[name="country"]');
        input.val(country);
    });
});


И в самом "country" идет получение двух букв страны и в последствии всё сверяется по регурярному выражению.

Предложите пожалуйста решение, чтобы каждый раз не добавлять вручную? Точнее более универсальное решение, может какую-то библиотеку для этого. Заранее всем большое спасибо.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@maksam07
https://github.com/giggsey/libphonenumber-for-php
use libphonenumber\PhoneNumberUtil;
use libphonenumber\NumberParseException;

public function validatePhone($phone, $country): bool
{
    $phoneUtil = PhoneNumberUtil::getInstance();

    try {
        $phoneNumber = $phoneUtil->parse($phone, strtoupper($country));
        return $phoneUtil->isValidNumber($phoneNumber);
    } catch (NumberParseException $e) {
        return false;
    }
}


https://www.npmjs.com/package/libphonenumber-js
import { parsePhoneNumberFromString } from 'libphonenumber-js';

$("#phoneinput").on('countrychange', function () {
    const country = window.iti.getSelectedCountryData().iso2.toUpperCase();
    const phone = $("#phoneinput").val();
    const phoneNumber = parsePhoneNumberFromString(phone, country);

    if (phoneNumber && phoneNumber.isValid()) {
        // Номер телефона валиден
    } else {
        // Номер телефона не валиден
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы