Как вы можете «НЕ» разрешить НЕ-пробелы в регулярном выражении? - PullRequest
1 голос
/ 04 октября 2019

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

Примечание: n обозначает номер.

nn-123
nn-12345678

nnn-1234567

nnnn-1234
nnnn-123456
nnnn-1234567

Примечание: пробелвместо тире тоже разрешено.

Проблема в том, что мое Регулярное выражение также допускает НЕ-пробел, но оно должно разрешать только тире или пробел.

Вот мой код регулярного выражения:

 /^([0-9]{3}[- ]?([0-9]{3}|[0-9]{7})|[0-9]{2}[- ]?([0-9]{3}|[0-9]{8})|[0-9]{4}[- ]?([0-9]{4}|[0-9]{6}|[0-9]{7})|[0-9]{3}[- ]?([0-9]{7}))$

РЕДАКТИРОВАТЬ: Чтобы прояснить ситуацию, вот пример моей проблемы:

Пример некоторых телефонных номеров, которые разрешены:

  06-12345678
  0800 1234
  425-1234567

Пример недопустимого номера телефона:

  1234567890 (My regex sadly allows this number)

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Как-то так?

\d{2,4}[-, \s]\d{3,}

Не совсем уверен, что конкретно ваши требования, но это будет работать следующим образом:

  • он будет соответствовать от 2 до 4 цифр
  • за ранее совпавшими цифрами должны следовать либо тире, либо пробел
  • за дефисом или интервалом должен следовать не менее 3 цифрсимволы

Если это не сработает, укажите все необходимые ограничения / требования.

Редактируйте, regex101:

https://regex101.com/r/uVwAK1/1

Я заменил «n» символов числом 1.

0 голосов
/ 04 октября 2019

Для соответствия этим форматам вы можете использовать чередования | и использовать класс символов [- ], но не делать его необязательным.

По частям

^(?:[0-9]{2}[- ](?:[0-9]{8}|[0-9]{3})|[0-9]{3}[ -][0-9]{7}|[0-9]{4}[ -](?:[0-9]{6,7}|[0-9]{4}))$
  • ^ Начало строки
  • (?: Группа без захвата
    • [0-9]{2}[- ] Совпадение из 2 цифри пробел или дефис
    • (?: группа без захвата
      • [0-9]{8} совпадение 8 цифр
      • | или
      • [0-9]{3} совпадение 3 цифр
    • ) Закрыть группу
    • | Или
    • [0-9]{3}[ -][0-9]{7} Совпадение 3 цифры, пробел или дефис и 7 цифр
    • | Или
    • [0-9]{4}[ -] Совпадение 4 цифр и пробел или дефис
    • (?:
      • [0-9]{6,7} Совпадение 6-7 цифр
      • | Или
      • [0-9]{4} Соответствие 4 цифр
    • ) Закрыть группу
  • )Закрыть группу
  • $ Конец строки

Regex demo

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