Regex Javascript Проверка номера телефона, проверка минимальной длины - PullRequest
0 голосов
/ 12 марта 2012

Я хочу очень простую проверку телефонного номера в Regex для Javascript, которая позволяет 10 digits и проверяет min numbers should be 10 and max 12, включая - dash two times, например.123-123-1234

Я нашел некоторые в Интернете, но ни один из них не работает на min / max length.

С нетерпением ждем быстрого ответа здесь.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Вы могли бы сделать это

/^(?!.*-.*-.*-)(?=(?:\d{8,10}$)|(?:(?=.{9,11}$)[^-]*-[^-]*$)|(?:(?=.{10,12}$)[^-]*-[^-]*-[^-]*$)  )[\d-]+$/

См. здесь на Regexr

(?!...) является отрицательным прогнозным утверждением

(?=...) является положительным прогнозом

^                                          # Start of the string
    (?!.*-.*-.*-)                          # Fails if there are more than 2 dashes
    (?=(?:\d{8,10}$)                   # if only digits to the end, then length 8 to 10
        |(?:(?=.{9,11}$)[^-]*-[^-]*$)  # if one dash, then length from 9 to 11
        |(?:(?=.{10,12}$)
            [^-]*-[^-]*-[^-]*$         # if two dashes, then length from 10 to 12
         )
    )
[\d-]+                                     # match digits and dashes (your rules are done by the assertions)
$                                          # the end of the string
2 голосов
/ 12 марта 2012

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

function isPhoneNumberValid(number){
  var parts, len = (
    parts = /^\d[\d-]+\d$/g.test(number) && number.split('-'),
    parts.length==3 && parts.join('').length
  );
  return (len>=10 && len<=12)
}

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

Это не совсем идеально, но может соответствовать вашим потребностям, однако учтите, что это допускает две черты в любом месте, кроме началаи конец числа, так что это вернет true для строки типа 111--123123.

0 голосов
/ 12 марта 2012

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

Если разрешить черточки только в местах, как в вашем примере, тогда это будет ^\d{3}-?\d{3}-?\d{4}$

Этот: ^[\d-]{10,12}$ соответствует строке длиной от 10 до 12 и содержит только цифры и тире, но также будет соответствовать, например, -1234567890-.

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