Подтвердить что ты не робот

Подтвердите номер телефона с помощью JavaScript

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

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

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

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

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

4b9b3361

Ответ 1

Во-первых, ваш валидатор формата, очевидно, подходит только для NANP (код страны +1). Будет ли ваша заявка использоваться кем-то с номером телефона из-за пределов Северной Америки? Если это так, вы не хотите, чтобы эти люди не вводили совершенно действительный [международный] номер.

Во-вторых, ваша проверка неверна. Номера NANP принимают форму NXX NXX XXXX, где N - это цифра 2-9, а X - цифра 0-9. Кроме того, коды областей и обмены могут не принимать форму N11 (заканчиваться двумя), чтобы избежать путаницы со специальными услугами, за исключением номеров в негеографическом коде страны (800, 888, 877, 866, 855, 900) a N11.

Итак, ваше регулярное выражение будет передавать число (123) 123 4566, хотя это не действительный номер телефона. Вы можете исправить это, заменив \d{3} на [2-9]{1}\d{2}.

Наконец, я чувствую, что вы проверяете ввод пользователя в веб-браузере. Помните, что проверка на стороне клиента только удобство, которую вы предоставляете пользователю; вам все равно нужно проверить все входные данные (снова) на сервере.

TL; DR не использовать регулярное выражение для проверять сложные данные реального мира, такие как номера телефонов или URLs. Используйте специализированную библиотеку .

Ответ 2

Мое регулярное выражение:

/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

Действующие форматы:

(123) 456-7890
(123) 456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725

Ответ 3

Если вы ищете 10 и всего 10 цифр, игнорируйте все, кроме цифр -

   return value.match(/\d/g).length===10;

Ответ 4

Что бы я сделал, это игнорировать формат и проверять числовое содержимое:

var originalPhoneNumber = "415-555-1212";

function isValid(p) {
  var phoneRe = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/;
  var digits = p.replace(/\D/g, "");
  return phoneRe.test(digits);
}

Ответ 5

Следующий REGEX будет проверять любой из этих форматов:

(123) 456-7890
123-456-7890
123.456.7890
1234567890

/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/

Ответ 6

/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g

(123) 456-7890
+ (123) 456-7890
+ (123) -456-7890
+ (123) - 456-7890
+ (123) - 456-78-90
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725

Это очень свободный вариант, и я предпочитаю держать его таким образом, в основном я использую его в регистрационных формах, где пользователям необходимо добавить свой номер телефона. Обычно у пользователей возникают проблемы с формами, которые обеспечивают соблюдение строгих правил форматирования, я предпочитаю, чтобы пользователь заполнил номер и формат, который он отображает, или перед тем, как сохранить его в базе данных. http://regexr.com/3c53v

Ответ 8

Я бы предложил использовать что-то более ясное (особенно думая, кому нужно будет поддерживать код)... как насчет:

var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
               formats
                 .replace(/([\(\)])/g, "\\$1")
                 .replace(/9/g,"\\d") +
               ")$");

где регулярное выражение создается из прозрачного шаблона? Добавление нового было бы без проблем, и даже сам клиент мог бы сделать это на странице "Параметры".

Ответ 9

Где str может быть любой из этих форм: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555

function telephoneCheck(str) {
  var isphone = /^(1\s|1|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/.test(str);
  alert(isphone);
}
telephoneCheck("1 555 555 5555");

Ответ 10

Это будет работать:

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

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

Ответ 11

Попробуйте этот вариант - он включает проверку и для международных форматов.

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

Это регулярное выражение проверяет следующий формат:

  • (541) 754-3010 Внутренние
  • + 1-541-754-3010 Международный
  • 1-541-754-3010 Набирается в США
  • 001-541-754-3010 Набранный из Германии
  • 191 541 754 3010 Набор из Франции

Ответ 12

/^\+?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) 76227382 2 (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");

Ответ 13

Все ответы велики, но здесь я думаю, что это немного более полно...

Это написано для соответствия 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 = любое число).

Ответ 14

очень просто

"9001234567".match(/^\d{10}$/g)

Ответ 15

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

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

к

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

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

Ответ 16

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

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

Ответ 17

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

$("#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;
}

Ответ 18

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

(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}

Ответ 19

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

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

Ответ 20

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

  let isPhoneNumber = input = > {

 пытаться {
   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, 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]
     // извлечение чисел из строки
     thenum = input.match(/[0-9] +/g).join(""),
     totalnums = thenum.length,
     last10Digits = parseInt (thenum)% 10000000000,
     ISDcode = thenum.substring(0, totalnums - 10);

   // номера телефонов обычно от 8 до 16 цифр
   если (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' ));код>

Ответ 21

\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}

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

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

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

\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, следовательно, удваивается.

Ответ 22

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

Ответ 23

Этот регистр подходит для международных телефонных номеров и нескольких форматов номеров мобильных телефонов.

Вот регулярное выражение:/^ (+ {1}\d {2,3}\s? [(] {1}\d {1,3} [)] {1}\s?\d+ | +\д {2,3}\с {1}\d+ |\d+) {1} [\ s | -]\d+ ([\ s | -]?\d+) {1,2} $/

Вот функция JavaScript

function isValidPhone(phoneNumber) {
    var found = phoneNumber.search(/^(\+{1}\d{2,3}\s?[(]{1}\d{1,3}[)]{1}\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}$/);
    if(found > -1) {
        return true;
    }
    else {
        return false;
    }
}

Это проверяет следующие форматы:

+44 07988-825 465 (с любой комбинацией дефисов вместо места, за исключением того, что только +44 должен следовать только пробел)

+44 (0) 7988-825 465 (с любой комбинацией дефисов вместо пробелов, за исключением того, что дефис не может существовать непосредственно до или после (0), а пробел до или после (0) не должен существовать)

123 456-789 0123 (с любой комбинацией дефисов вместо пробелов)

123-123 123 (с любой комбинацией дефисов вместо пробелов)

123 123456 (пробел можно заменить дефисом)

1234567890

Никакие двойные пробелы или двойные дефисы не могут существовать для всех форматов.

Ответ 24

Подтвердить номер телефона + вернуть отформатированные данные

function validTel(str){
  str = str.replace(/[^0-9]/g, '');
  var l = str.length;
  if(l<10) return ['error', 'Tel number length < 10'];
  
  var tel = '', num = str.substr(-7),
      code = str.substr(-10, 3),
      coCode = '';
  if(l>10) {
    coCode = '+' + str.substr(0, (l-10) );
  }
  tel = coCode +' ('+ code +') '+ num;
  
  return ['succes', tel];
}

console.log(validTel('+1 [223] 123.45.67'));

Ответ 25

Простое регулярное выражение: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g

Проверьте формат, надеюсь, что он работает:
  444-555-1234
  е: 246.555.8888
  м: 1235554567

Ответ 26

Попробуйте эту функцию JS. Возвращает true, если совпадает, и false, если не получается Ref.

function ValidatePhoneNumber(phone) {
        return /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/.test(phone);
}

Ответ 27

попробуй это

/^[\+]?\d{2,}?[(]?\d{2,}[)]?[-\s\.]?\d{2,}?[-\s\.]?\d{2,}[-\s\.]?\d{0,9}$/im

действительные форматы:

  1. (123) 456-7890
  2. (123)456-7890
  3. 123-456-7890
  4. 123.456.7890
  5. 1234567890
  6. +31636363634
  7. +3 (123) 123-12-12
  8. +3 (123) 123-12-12
  9. +3 (123) 1231212
  10. +3 (123) 12312123
  11. 075-63546725

Ответ 28

Подтвердите номер телефона по индийскому стандарту, например, начните с 6,7,8 или 9, и общая цифра должна быть 10

Решение протестировано и работает

if(phone=='')       
{
    alert("please fill out the field");
}


if ($('#phone').val()!="")
{
    if(!phoneno.test(phone)) 
    {
        alert("enter valid phone number with indian standard.")
        exit;
    }
    else
    {
        alert("valid phone number");
    }
}