ищу подтверждение номера телефона США с кодом города - PullRequest
1 голос
/ 06 ноября 2010

Я работаю над функцией проверки номера телефона США, предоставленного пользователем, который может быть представлен в любом из популярных форматов номеров, которые обычно используют люди.Мой код на данный момент выглядит следующим образом:

$number = '123-456-7890';

function validate_telephone_number($number) {
    $formats = array(
        '###-###-####',
        '(###)###-###',
        '(###) ###-###',
        '##########'
    );

    $number = trim(preg_replace('[0-9]', '#', $number));

    if (in_array($number, $formats)) {
        return true;
    } else {
        return false;
    }
}

Во-первых, этот код, похоже, не работает и возвращает false на всех представленных номерах.Кажется, я не могу найти свою ошибку.

Во-вторых, я ищу простой способ разрешить номера телефонов из массива определенных разрешенных кодов городов.Есть идеи?

Ответы [ 4 ]

1 голос
/ 06 ноября 2010

По первому вопросу:

preg_replace('/[0-9]/', '#', $number)

или '/\d/'


По второму вопросу это может помочь вам:

$areaCode = substr(preg_replace('/[^\d]/', '', $number),0 , 3);

Это будетдать вам первые 3 цифры номера, отбросив все остальные символы.

Я не знаком с форматом кодов городов США, поэтому не могу вам больше помочь с этим.


Бонус:

if (in_array($number, $formats)) {
    return true;
} else {
    return false;
}

эквивалентен

return in_array($number, $formats);

Фактически любое утверждение в форме

if(<expression>){
    return true;
}
else{
    return false;
}

можетзаписывается как return (bool) <expr>;, но в этом случае in_array всегда будет возвращать логическое значение, поэтому (bool) не требуется.

0 голосов
/ 19 июля 2018

Смотрите здесь для проекта кода, который имеет функцию для проверки телефонных номеров.

0 голосов
/ 04 марта 2013

Если вы предпочитаете делать это без большого количества кода, вы можете проверить этот API, который проверяет номер в США и предоставляет несколько форматов для номера https://www.mashape.com/parsify/format

0 голосов
/ 06 ноября 2010

Ваш код не проверяет правильность форматированных, но недействительных номеров - например, в США код города не начинается с 0 или 1, поэтому это можно проверить. Кроме того, ваши форматы не допускают включение кода страны - например, будет отклонено +15551234567.

Если вас не волнует форматирование, и вы просто хотите проверить, соответствуют ли цифры входного номера действительному номеру телефона в США, вы можете использовать что-то вроде этого:

$clean_number = preg_replace("/[^0-9]/", '', $number);
$valid = preg_match("/^(\+?1)?[2-9][0-9]{9}$/", $clean_number);

Конечно, это также примет "foo 5555555555 bar" в качестве допустимого числа - если вы хотите запретить это, сделайте preg_replace более ограничительным (например, удалите только скобки, пробелы и тире).

...