Я нашел этот код на каком-то сайте, и он отлично работает. Он подтверждает, что номер телефона находится в одном из следующих форматов:
(123) 456-7890 или 123-456-7890.
Проблема в том, что мой клиент (я не знаю почему, возможно, клиентские вещи) хочет добавить другой формат, десять чисел подряд, примерно так: 1234567890 .
Я использую это регулярное выражение,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Как я могу добавить, что он также проверяет другой формат? Я плохо разбираюсь в регулярных выражениях.
javascript
regex
Кастро Рой
источник
источник
Ответы:
Во-первых, ваш валидатор формата, очевидно, подходит только для номеров NANP (код страны +1). Будет ли ваше приложение использоваться кем-то с номером телефона за пределами Северной Америки? Если это так, вы не хотите, чтобы эти люди вводили совершенно действительный [международный] номер.
Во-вторых, ваша проверка неверна. Номера NANP имеют форму,
NXX NXX XXXX
гдеN
это цифры 2-9 иX
цифры 0-9. Кроме того, коды городов и обмены не могут иметь формуN11
(заканчиваться двумя), чтобы избежать путаницы со специальными услугами, за исключением номеров в негеографическом коде зоны (800, 888, 877, 866, 855, 900), могут иметьN11
обмен.Итак, ваше регулярное выражение передаст номер (123) 123 4566, даже если это не действительный номер телефона. Вы можете исправить это, заменив
\d{3}
на[2-9]{1}\d{2}
.Наконец, у меня такое ощущение, что вы проверяете ввод пользователя в веб-браузере. Помните, что проверка на стороне клиента - это только удобство, которое вы предоставляете пользователю ; вам все еще нужно проверить все вводимые данные (снова) на сервере.
TL; DR не используйте регулярные выражения для проверки сложных реальных данных, таких как номера телефонов или URL-адреса . Воспользуйтесь специализированной библиотекой .
источник
Мое регулярное выражение выбора:
/^[\+]?[(]?[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
источник
i
делает выражение нечувствительным к регистру иm
выполняет многострочный поиск^
в начале и$
в конце, оно также может найти телефонные номера в середине строкЕсли вы ищете 10 и только 10 цифр, игнорируйте все, кроме цифр -
return value.match(/\d/g).length===10;
источник
return (value.match(/\d/g) || []).length == 10
или гораздо проще (но не менее испорчен)return value.replace(/\D/g,'').length == 10
./\D/gi.test(value)
. Все,Я бы проигнорировал формат и проверил числовое содержимое:
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); }
источник
/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g
Это очень свободный вариант, и я предпочитаю оставить его таким, в основном я использую его в формах регистрации, где пользователям нужно добавить свой номер телефона. Обычно у пользователей возникают проблемы с формами, которые обеспечивают соблюдение строгих правил форматирования, я предпочитаю, чтобы пользователь вводил число и форматировал его на дисплее или перед сохранением в базе данных. http://regexr.com/3c53v
источник
+41 (79) 123 45 67
(Швейцария):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
Следующий 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}$/
источник
.
иначе он будет соответствовать произвольному символу, нарушая ваше регулярное выражение.Я бы посоветовал использовать что-то более ясное (особенно подумайте о том, кому придется поддерживать код) ... как насчет:
var formats = "(999)999-9999|999-999-9999|9999999999"; var r = RegExp("^(" + formats .replace(/([\(\)])/g, "\\$1") .replace(/9/g,"\\d") + ")$");
где регулярное выражение построено по четкому шаблону? Добавление нового тогда не составит труда, и, возможно, даже сам клиент сможет сделать это на странице «Параметры».
источник
Где 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");
источник
Попробуйте этот - он также включает проверку для международных форматов.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
Это регулярное выражение проверяет следующий формат:
источник
Это будет работать:
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Символ
?
означает, что предыдущая группа должна быть сопоставлена ноль или один раз. Группа(-|\s)
будет соответствовать либо символу,-
либо|
символу. Добавление?
после второго вхождения этой группы в ваше регулярное выражение позволяет сопоставить последовательность из 10 последовательных цифр.источник
/^\+?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");
источник
действительно просто
"9001234567".match(/^\d{10}$/g)
источник
Все ответы прекрасны, но вот один, на мой взгляд, более исчерпывающий ...
Это написано для соответствия 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 = любое число).
источник
Этот регистр подходит для международных телефонных номеров и нескольких форматов мобильных номеров.
Вот регулярное выражение: / ^ (+ {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} $ /
Вот функция 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
Для всех форматов не может быть двойных пробелов или двойных дефисов.
источник
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Символ
?
означает, что предыдущая группа должна быть сопоставлена ноль или один раз. Группа(-|\s)
будет соответствовать либо символу,-
либо|
символу.источник
Я должен согласиться, что проверка номеров телефонов - сложная задача. Что касается этой конкретной проблемы, я бы изменил регулярное выражение с
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)\d{4}$/
к
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
поскольку единственный лишний элемент становится ненужным - это последний тире / пробел.
источник
Если вы используете тег ввода, этот код вам поможет. Я пишу этот код сам и считаю, что это очень хороший способ ввода. но вы можете изменить его, используя свой формат. Это поможет пользователю исправить свой формат во входном теге.
$("#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; }
источник
Просто хотел добавить решение специально для выбора неместных номеров телефонов (типа 800 и 900).
(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}
источник
Попробуйте эту функцию js. Возвращает истину , если он соответствует и ложно , если оно не реф
function ValidatePhoneNumber(phone) { return /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/.test(phone); }
источник
Подтвердить номер телефона + вернуть данные в формате
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'));
источник
попробуй это
допустимые форматы
https://regex101.com/r/QXAhGV/1
источник
{1}
бесполезно,{0,}
лучше написано*
. Зачем нужны все эти группы захвата? Они замедляют процесс.Эта функция у нас хорошо сработала:
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-9883208806'));
источник
Простое регулярное выражение:
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g
Ознакомьтесь с форматом, надеюсь, он
сработает : 444-555-1234
f: 246.555.8888
m: 1235554567
источник
\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}
Это проверит любой номер телефона переменного формата:
\\(?\d{3}\\)?
находит 3 цифры, заключенные в круглые скобки, или нет.([\-\s\.])?
находит любой из этих разделительных символов или нет\d{3}
находит 3 цифры\1
использует первый совпавший разделитель - это гарантирует, что разделители совпадают. Таким образом, (000) 999-5555 не будет проверяться здесь, потому что есть разделитель пробела и тире, поэтому просто удалите "\ 1" и замените его подшаблоном разделителя (это также приведет к проверке нестандартных форматов). Однако вы в любом случае должны использовать подсказки формата для пользовательского ввода.\d{4}
находит 4 цифрыПодтверждает:
Кстати, это для JavaScript, следовательно, для двойного экранирования.
источник
Просто игнорируйте все, кроме цифр.
Вот что я использую:
// USA phones should contain at least 10 digits. For Ukrainian phones it's OK to have only 9 digits, without leading 0 and country code prefix: [+380] 88 888-88-88. String.prototype.isValidPhone = function(digitsCount) { var str = this.trim().match(/\d/g); return str && str.length >= (digitsCount || 10); // default is at least 10 digits }
источник
попробуй это
/^[\+]?\d{2,}?[(]?\d{2,}[)]?[-\s\.]?\d{2,}?[-\s\.]?\d{2,}[-\s\.]?\d{0,9}$/im
допустимые форматы:
источник