Проверка номера телефона Javascript - PullRequest
2 голосов
/ 13 марта 2011

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

Итак, я попробовал следующее:

else if (phone == null || !phone.toString().match(/^[-]?\d*\.?\d*$/)){

Но на самом деле это допускает любую длину и даже пустой ввод.

Что я должен сделать для проверки телефонных номеров? Я не настолько опытен с Javascript.

Ответы [ 7 ]

8 голосов
/ 13 марта 2011

Регулярное выражение для точного совпадения с 11 цифрами: /^\d{11}$/.

3 голосов
/ 22 августа 2012

UK номера НЕ 11 цифр.Они состоят из 9 или 10 цифр, не включая код магистрали 0 или +44 префикс страны.

Правила несколько сложны, но могут быть определены в нескольких шаблонах RegEx.

Первым шагом должно быть снятие префикса +44, 00 44, 011 44, +44 (0), 00 44 (0), 011 44 (0) или 0 перед исследованием остальной части числа.

Pattern: ^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(44)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d\s-]+)((?:x|ext\.?|\#)\d{3,4})?$

Используйте вышеприведенный шаблон для извлечения 44 из $2, чтобы узнать, что использовался международный формат, в противном случае примите национальный формат, если $2 равен нулю.

Извлеките дополнительные сведения о добавочном номереиз $4 и сохраните их для последующего использования.

Извлеките NSN (включая пробелы, дефисы и скобки) из $3.Удалите эти пробелы, дефисы и скобки и используйте шаблон RegEx ниже для проверки длины и начальных цифр.

Pattern: ^((1[1-9]|2[03489]|3[0347]|5[56]|7[04-9]|8[047]|9[018])\d{8}|(1[2-9]\d|[58]00)\d{6}|8(001111|45464\d))$ 

Гораздо более подробные шаблоны доступны в других местах, вплоть до отдельных кодов города.

3 голосов
/ 13 марта 2011

Да, вы должны использовать регулярное выражение, но я бы позволил пользователю добавлять другие символы для удобства чтения.Это может сработать, если ваш номер телефона должен состоять всего из 11 цифр:

/^(?:\W*\d){11}\W*$/.test(phone.value)

\W - это что угодно, кроме цифр, букв и подчеркивания, но так как он предназначен для пробелов, точек, дефисов и слешей, вместо этого вы можете использовать [ .\-\/].

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

phone.value = phone.value.replace(/\W+/g, '');

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

0 голосов
/ 31 января 2018

Я лично проверяю на

/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/

или

/^((0|\+44)7\d{3}\s?\d{6})$/

, если я хочу специально выделить номера мобильных телефонов.Надеюсь, это поможет.

0 голосов
/ 23 сентября 2015

На www.aa-asterisk.org.uk вы можете найти различные шаблоны, связанные с телефонными номерами в Великобритании, например:

Шаблон:

 ^\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$

Приведенный выше шаблон соответствует необязательным открывающим скобкам, за которыми следуют 00 или 011 и необязательные закрывающие скобки, за которыми следует необязательный пробел или дефис, а затем необязательные открывающие скобки.Кроме того, за начальными открывающими скобками следует буквальный + без следующего пробела или дефиса.Затем за любой из двух предыдущих опций следует 44 с необязательными закрывающими скобками, за которыми следуют необязательный пробел или дефис, за которым следует необязательный 0 в необязательных скобках, затем необязательный пробел или дефис и затем необязательные открывающие скобки (международный формат).Кроме того, шаблон соответствует необязательным начальным открывающим скобкам, за которыми следует код транка 0. (национальный формат).

например, для сопоставления номера мобильного телефона вы можете использовать следующую функцию

    function isMobile(v) {

        //handle leading 0
        if (v.indexOf('0') === 0) {
            v = v.substring(1);
        }

        var mobile_valid = /^7(?:[1-4]\d\d|5(?:0[0-8]|[13-9]\d|2[0-35-9])|624|7(?:0[1-9]|[1-7]\d|8[02-9]|9[0-689])|8(?:[014-9]\d|[23][0-8])|9(?:[04-9]\d|1[02-9]|2[0-35-9]|3[0-689]))\d{6}$/.test(v);
        var pager_valid = /^76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}$/.test(v);

        // https://en.wikipedia.org/wiki/Personal_numbering
        var personal_number = /^70\d{8}$/.test(v);

        if (pager_valid || mobile_valid || personal_number) {
            return true;
        }

        return false;
    }
0 голосов
/ 13 марта 2011

Хотите ли вы что-то похожее на это: /^\d{5} \d{6}$/?

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

0 голосов
/ 13 марта 2011

Следующая строка соответствует точно 11 цифрам на телефоне:

else if (/^\d{11}$/.test(phone)) {

Я предполагаю, phone это строка, как в:

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