Как изменить регулярное выражение для телефонных номеров и принимать только цифры - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть следующий метод регулярных выражений для плагина проверки jquery.

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
    return this.optional(element) || phone_number.length > 9 &&
        phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

В настоящее время проверяется по телефонным номерам в этом формате: 203-123-1234

Мне нужно изменить, чтобы подтвердить, как это: 2031231234

У кого-нибудь есть быстрое и простое решение для меня?

Ответы [ 6 ]

3 голосов
/ 01 сентября 2011

Вы можете заменить

phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);

с этим

phone_number.match(/\d{10}/);

\d означает совпадение с любой цифрой

и

{10} означает 10 раз

2 голосов
/ 01 сентября 2011

Я думаю, что лучшим подходом было бы изменение всего выражения с более простой версией, что-то вроде этого:

/^[0-9]{10}$/

Отредактировано, Примечание (см. Комментарии):

Это лишь ограниченный пример проверки формата: 111-222-3333 против 1112223333, неправильная проверка номера телефона в США.

2 голосов
/ 01 сентября 2011

Избавление от всех этих -? последовательностей, вероятно, самый быстрый способ - они означают ноль или один - символов.

Это уменьшит его до:

/^(1)?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{2}\d{4}$/

который может быть дополнительно упрощен до:

/^1?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{6}$/

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

/^1?[2-9]\d{2}[2-9]\d{6}$/

(и, технически, он не будет совпадать с литералом 203-123-1234, так как символ сразу после этого первого - должен быть от 2 до 9, поэтому я предполагаю, что вы только что говорили о формате , а не значения там).

1 голос
/ 01 сентября 2011

Если вы просто хотите десять цифр, то

phone_number.match(/\d{10}/)

сделает это. Если вы хотите соответствовать любому из других условий (например, соответствовать 1-2031231234 и 2031231234), вам нужно будет добавить еще.

В качестве примечания: то, что у вас есть, не соответствует 203-123-1234, потому что первая цифра после первого дефиса - 1, и в этом месте он ищет 2-9.

0 голосов
/ 01 сентября 2011

Вы можете использовать, если хотите соответствовать всем форматам, включая 203-123-1234 и 2031231234

РЕДАКТИРОВАТЬ: я не эксперт по регулярным выражениям, но я добавил поддержку "1-"

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

Кстати, есть действительно хороший инструмент AIR для регулярных выражений, он называется RegExr, и вы можете получить настольную версию здесь http://www.gskinner.com/RegExr/desktop/ или использовать онлайн-версию http://gskinner.com/RegExr/. Также есть раздел «Сообщество», который содержит много полезных регулярных выражений. Вот где я взял это.

0 голосов
/ 01 сентября 2011
([0-9]{10}) this will match with 10 digit number.
...