Проверяйте только номера телефонов в США

В настоящее время я создаю веб-сайт на PHP, с которым пользователи смогут взаимодействовать посредством SMS-сообщений. Следовательно, мне нужно хранить их номера телефонов в моей базе данных. Так как я сейчас разрешаю только SMS-взаимодействия в США, мне нужно проверить, соответствуют ли представленные номера телефонов формату США. Как правило, это означает несколько вещей: 1 должен быть первым номером, код города не должен начинаться с 0 или же 1и строка без ведущего 1 должно быть 10 цифр (3-значный код города плюс 7-значный номер).

Несмотря на все эти требования, я хочу, чтобы пользователи могли свободно вводить свой номер в любом формате по своему усмотрению, не вызывая ошибки.

0

Решение

Игнорирование не цифр — это первый шаг. Ведущая 1 требуется не всем телефонным компаниям, особенно вблизи Нью-Джерси. Набор номера вызывает ошибку или неправильный номер.

Код города не может быть [2-9] 11 или [2-9] 9 [0-9]. Коды зоны с центральной цифрой 9 зарезервированы для еще не решенной схемы для решения проблемы исчерпания кода города.

Обмены также не могут начинаться с 0 или 1 и не могут быть [2-9] 11.


Эти ограничения выражены этим кодом:

$mobile = preg_replace ('/\D/', '', $trimmed['mobile']);

if ($mobile[0] == '1') $mobile = substr ($mobile, 1);  // remove prefix

$invalid = strlen ($mobile) != 10  ||
preg_match ('/^1/',      $mobile) ||  // ac start with 1
preg_match ('/^.11/',    $mobile) ||  // telco services
preg_match ('/^...1/',   $mobile) ||  // exchange start with 1
preg_match ('/^....11/', $mobile) ||  // exchange services
preg_match ('/^.9/',     $mobile);    // ac center digit 9
2

Другие решения

Узнав, что я мог от поиска и чистки, я не смог найти метод только для США. Итак, вот что я разработал:

Во-первых, чтобы разрешить любой формат ввода, используйте preg_replace удалить все нецифровые символы. [Пользователи могут использовать любые дефисы или косые черты, которые они хотят, но они бесполезны для меня.]

$mobile = preg_replace('/\D/', '', $trimmed['mobile']);

Работая с чистой строкой цифр, исключите любые 1s — это заботится о любом случае, когда пользователь включил первую 1 или где он начал код города с 1, [Если действительно, это всегда должно оставлять меня с 10 цифровая строка.]

$mobiletrim = ltrim($mobile, '1');

Затем, регулярное выражение проверяет, что урезанный номер телефона точно 10 цифры длинные и не начинаются ни с 0 или 1,

    if (preg_match ('/^[2-9]\d{9}$/', $mobiletrim) || empty($trimmed['mobile'])) {
$mp = TRUE;
if (!empty($trimmed['mobile'])) { $mobiletrim = "1" . $mobiletrim; }
} else {
$profile_errors[] = "Please enter a valid U.S. phone number.";
}
if ($mp) { //Store Phone Number in db }

Последний шаг, который вы можете увидеть выше, заключался в добавлении ведущих 1 перед сохранением действительного номера в БД, при условии, что пользователь не отправит пустое поле телефона, что он будет делать, если не хочет, чтобы его номер сохранялся.


Технически, это будет проверять все номера NANP. Единственный способ сузить его только от NANP до США — это проверить, использовался ли код зоны США, проанализировав список текущих кодов зон США.

0

По вопросам рекламы [email protected]