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

Regex для проверки мобильных номеров

Я хочу регулярное выражение для проверки номера мобильного телефона. Шаблон регулярного выражения должен быть таким, чтобы он принимал + только в начале, а пробел (или -) разрешался только после кода страны (только один раз). После кода страны должно быть разрешено только 10-значное число. Код страны должен быть необязательным. Если код страны не существует, он должен принять только 10-значный номер. +91 0000000000 должно предотвращать любое недопустимое число, например (например: +91 0000000000 или 0000000000).

Регулярное выражение должно принимать такие числа, как

  • +1 8087339090
  • +91 8087339090
  • +91 2 8087339090
  • 8087339090
  • 08087339090
  • +1 -8087339090
  • +91 -8087339090
  • +91 2-8087339090
  • +91 8087677876 (код страны (2 цифры) + 10 цифр номера мобильного телефона)
  • +91 08087735454 (код страны (3 цифры) + 10 цифр номера мобильного телефона)

Регулярное выражение не должно принимать такие числа, как

  • ++51 874645 (двойной + подряд)
  • +71 84364356 (двойные последовательные пробелы)
  • +91 808 75 74 678 (не более одного пробела)
  • +91 808-75-74-678 (не более одного -)
  • +91 -846363
  • 80873 (число меньше 10 цифр)
  • 8087339090456 (число больше 10 цифр)
  • 0000000000 (все нули)
  • +91 0000000 (все нули с кодом страны)
4b9b3361

Ответ 1

Удовлетворяет все ваши требования, если вы используете трюк, указанный ниже

Regex: /^(\+\d{1,3}[- ]?)?\d{10}$/

  • ^ начало строки
  • A +, за которым следует \d+, а затем или -, которые являются необязательными.
  • Целая точка не является обязательной.
  • Отрицательный взгляд, чтобы убедиться, что 0 не следует.
  • Соответствует \d+ 10 раз.
  • Линейный конец.

DEMO Добавлен m флаг ultiline в демоверсию для проверки всех случаев

P.S. Вам действительно нужно указать, какой язык вы используете, чтобы использовать условие if, как показано ниже:

// true if above regex is satisfied and (&&) it does not (`!`) match `0`s `5` or more times

if(number.match(/^(\+\d{1,3}[- ]?)?\d{10}$/) && ! (number.match(/0{5,}/)) )

Ответ 2

Попробуйте это регулярное выражение:

^(\+?\d{1,4}[\s-])?(?!0+\s+,?$)\d{10}\s*,?$

Объяснение регулярного выражения с использованием Perl YAPE выглядит следующим образом:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1 (optional
                           (matching the most amount possible)):
----------------------------------------------------------------------
    \+?                      '+' (optional (matching the most amount
                             possible))
----------------------------------------------------------------------
    \d{1,4}                  digits (0-9) (between 1 and 4 times
                             (matching the most amount possible))
----------------------------------------------------------------------
    [\s-]                    any character of: whitespace (\n, \r,
                             \t, \f, and " "), '-'
----------------------------------------------------------------------
  )?                       end of \1 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
----------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
----------------------------------------------------------------------
    0+                       '0' (1 or more times (matching the most
                             amount possible))
----------------------------------------------------------------------
    \s+                      whitespace (\n, \r, \t, \f, and " ") (1
                             or more times (matching the most amount
                             possible))
----------------------------------------------------------------------
    ,?                       ',' (optional (matching the most amount
                             possible))
----------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------
  \d{10}                   digits (0-9) (10 times)
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  ,?                       ',' (optional (matching the most amount
                           possible))
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

Ответ 3

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

/^([+]\d{2})?\d{10}$/

Например: +910123456789 или 0123456789

->/^ and $/is for starting and ending
-> The? mark is used for conditional formatting where before question mark is available or not it will work
-> ([+]\d{2}) this indicates that the + sign with two digits '\d{2}' here you can place digit as per country
-> after the? mark '\d{10}' this says that the digits must be 10 of length change as per your country mobile number length

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

если вы хотите добавить пробел между чем вы можете использовать

[ ]

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

/^([+]\d{2}[ ])?\d{10}$/

Пример: +91 0123456789

Спасибо задать любой вопрос, если у вас есть.