Подтвердите номер телефона с помощью JavaScript - PullRequest
115 голосов
/ 02 декабря 2010

Я нашел этот код на каком-то сайте, и он отлично работает. Он подтверждает, что номер телефона имеет один из следующих форматов:
(123) 456-7890 или 123-456-7890

Проблема в том, что мой клиент (я не знаю почему, может быть, клиентские материалы) хочет добавить другой формат, десять чисел подряд, что-то вроде этого:

Я использую это регулярное выражение,

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

Как я могу добавить, что он также проверяет другой формат? Я не хорошо с регулярными выражениями.

Ответы [ 26 ]

3 голосов
/ 26 сентября 2013

Ответы всех хороши, но вот один, я думаю, более всеобъемлющий ...

Это написано для использования в формате javascript совпадения одного числа в одной строке:

^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$

Если вы хотите сопоставить на границах слов, просто измените ^ и $ на \ b

Я приветствую любые предложения, исправления или критику этого решения. Насколько я могу судить, это соответствует формату NANP (для номеров США - я не проверял другие страны Северной Америки при его создании), избегает любых ошибок 911 (не может быть в коде области или коде региона), устраняет только те 555 номеров, которые действительно недействительны (код региона 555, за которым следует 01xx, где x = любое число).

3 голосов
/ 04 января 2017

/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/

Хотя этот пост старый, но хочу оставить свой вклад.они принимаются: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555

они не принимаются:

555-5555 -> чтобы принять это использование: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

5555555 -> чтобы принять это использование: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

1 555) 555-5555 123** & !! asdf # 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 2 757 622-7382 10 (757) 622-7382 27576227382 (275) 762273822 (757) 6227382 2 (757) 622-7382 (555) 5 (55?) - 5555

Я использовал этот код:

function telephoneCheck(str) {
  var patt = new RegExp(/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/);
  return patt.test(str);
}

telephoneCheck("+1 555-555-5555");
2 голосов
/ 18 сентября 2018

очень просто

"9001234567".match(/^\d{10}$/g)
1 голос
/ 01 июня 2018
\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}

Это подтвердит любой телефонный номер переменного формата:

\\(?\d{3}\\)? находит 3 цифры, заключенные в круглые скобки или нет.

([\-\s\.])? находит любой из этих символов-разделителей илиnot

\d{3} находит 3 цифры

\1 использует первый согласованный разделитель - это гарантирует, что разделители совпадают.Поэтому (000) 999-5555 не будет проверяться здесь, потому что есть разделитель пробела и тире, поэтому просто удалите «\ 1» и замените его под-шаблоном разделителя (это также будет проверять нестандартные форматы).Тем не менее, в любом случае вы должны указывать формат для ввода пользователем.

\d{4} находит 4 цифры

Проверяет:

  • (000) 999 5555
  • (000) -999-5555
  • (000) .999,5555
  • (000) 999-5555
  • (000) 9995555
  • 000 999 5555
  • 000-999-5555
  • 000.999.5555
  • 0009995555

Кстати, это для JavaScript, следовательно, для двойного побега.

1 голос
/ 29 декабря 2017

У Google есть хорошая библиотека для обработки телефонных номеров в Javascript: https://github.com/googlei18n/libphonenumber. Работает также с Java и C ++.

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

1 голос
/ 18 января 2018

Эта функция хорошо сработала для нас:

let isPhoneNumber = input => {

  try {
    let ISD_CODES = [93, 355, 213, 1684, 376, 244, 1264, 672, 1268, 54, 374, 297, 61, 43, 994, 1242, 973, 880, 1246, 375, 32, 501, 229, 1441, 975, 591, 387, 267, 55, 246, 1284, 673, 359, 226, 257, 855, 237, 1, 238, 1345, 236, 235, 56, 86, 61, 61, 57, 269, 682, 506, 385, 53, 599, 357, 420, 243, 45, 253, 1767, 1809, 1829, 1849, 670, 593, 20, 503, 240, 291, 372, 251, 500, 298, 679, 358, 33, 689, 241, 220, 995, 49, 233, 350, 30, 299, 1473, 1671, 502, 441481, 224, 245, 592, 509, 504, 852, 36, 354, 91, 62, 98, 964, 353, 441624, 972, 39, 225, 1876, 81, 441534, 962, 7, 254, 686, 383, 965, 996, 856, 371, 961, 266, 231, 218, 423, 370, 352, 853, 389, 261, 265, 60, 960, 223, 356, 692, 222, 230, 262, 52, 691, 373, 377, 976, 382, 1664, 212, 258, 95, 264, 674, 977, 31, 599, 687, 64, 505, 227, 234, 683, 850, 1670, 47, 968, 92, 680, 970, 507, 675, 595, 51, 63, 64, 48, 351, 1787, 1939, 974, 242, 262, 40, 7, 250, 590, 290, 1869, 1758, 590, 508, 1784, 685, 378, 239, 966, 221, 381, 248, 232, 65, 1721, 421, 386, 677, 252, 27, 82, 211, 34, 94, 249, 597, 47, 268, 46, 41, 963, 886, 992, 255, 66, 228, 690, 676, 1868, 216, 90, 993, 1649, 688, 1340, 256, 380, 971, 44, 1, 598, 998, 678, 379, 58, 84, 681, 212, 967, 260, 263],
      //extract numbers from string
      thenum = input.match(/[0-9]+/g).join(""),
      totalnums = thenum.length,
      last10Digits = parseInt(thenum) % 10000000000,
      ISDcode = thenum.substring(0, totalnums - 10);

    //phone numbers are generally of 8 to 16 digits
    if (totalnums >= 8 && totalnums <= 16) {
      if (ISDcode) {
        if (ISD_CODES.includes(parseInt(ISDcode))) {
          return true;
        } else {
          return false;
        }
      } else {
        return true;
      }
    }
  } catch (e) {}

  return false;
}

console.log(isPhoneNumber('91-9773207706'));
1 голос
/ 12 марта 2013

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

Символ ? означает, что предыдущей группе должен соответствовать ноль или один раз.Группа (-|\s) будет соответствовать символу - или |.

1 голос
/ 12 сентября 2017

Просто хотел добавить решение специально для выбора нелокальных телефонных номеров (800 и 900 типов).

(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}
1 голос
/ 16 апреля 2017

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

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}
1 голос
/ 02 декабря 2010

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

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)\d{4}$/

до

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

, поскольку единственный лишний элемент, который становится ненужным, - это последняя черта / пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...