Как создать соответствующий шаблон регулярного выражения для «больше, чем 10-000-000 и ниже, чем 150-000-000»? - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь вызвать ошибку

09-546-943

в приведенном ниже шаблоне регулярных выражений.

^ [0-9] {2,3} [-] {0,1} [0-9] {3} [-] {0,1} [0-9]{3} $

Критерий прохождения:
больше 10-000-000 или 010-000-000 и
меньше 150-000-000

попробовал пример "09-546-943" проходит.Это должно быть неудачей.
Любая идея, как создать регулярное выражение, которое делает этот пример неудачным вместо прохода?

Ответы [ 3 ]

4 голосов
/ 27 июня 2019

Вы можете использовать

^(?:(?:0?[1-9][0-9]|1[0-4][0-9])-[0-9]{3}-[0-9]{3}|150-000-000)$

См. Демонстрацию регулярных выражений .

Шаблон частично создан с помощью этого онлайн-генератора регулярных выражений для диапазона номеров Я установил минимальное число 10 и максимальное 150, затем объединил ветви, соответствующие 1-8 и 9 (здесь инструмент плохо работает), добавил 0? к двузначным числам, чтобысопоставьте опциональные ведущие 0 и -[0-9]{3}-[0-9]{3} для 10-149 детали и -000-000 для 150.

См. график регулярных выражений :

enter image description here

Подробности

  • ^ - начало строки
  • (?: - начало контейнерагруппа захвата, которая делает анкеры применимыми к обеим альтернативам:
    • (?:0?[1-9][0-9]|1[0-4][0-9]) - необязательно 0, а затем число от 10 до 99 или 1, за которым следуют цифры от 0 до 4, а затем любойцифра (от 100 до 149)
    • -[0-9]{3}-[0-9]{3} - дефис и три цифры, повторенные дважды (= (?:-[0-9]{3}){2})
  • | - или
    • 150-000-000 - 150-000-000 значение
  • ) - конец группы без захвата
  • $ - конец строки.
0 голосов
/ 27 июня 2019

Этот шаблон:

((0?[1-9])|(1[0-4]))[0-9]-[0-9]{3}-[0-9]{3}

соответствует диапазону от (0)10-000-000 до 149-999-999 включительно.Чтобы упростить регулярное выражение, вам может потребоваться обрабатывать крайние значения ((0)10-000-000 и 150-000-000) отдельно - в зависимости от того, нужно ли вам их включать или исключать.

Тест здесь.

Это регулярное выражение:

((0?[1-9])|(1[0-4]))[0-9][- ]?[0-9]{3}[- ]?[0-9]{3}

принимает (пробел) или ничего вместо -.

Test здесь .

0 голосов
/ 27 июня 2019

Это выражение или, возможно, слегка измененная версия, которая может работать:

^[1][0-4][0-9]-[0-9]{3}-[0-9]{3}$|^[1][0]-[0-9]{3}-[0-9]{2}[1-9]$

Это также не удалось бы 10-000-000 и 150-000-000.

В этой демоверсии объяснено выражение, если вам может быть интересно.

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