Как представить диапазоны чисел регулярного выражения (например, от 1 до 12)?

Я сейчас пользуюсь ([1-9]|1[0-2]) представлять входные данные от 1 до 12. (Ведущие нули не допускаются.)

Однако это выглядит довольно нахально, а в некоторые дни выглядит просто грязно.

☞ Есть ли подходящий встроенный способ сделать это?

☞ Каковы другие способы представления диапазонов номеров?

9 ответов

Решение

Я склонен идти с такими формами, как [2-9]|1[0-2]? который избегает возврата назад, хотя здесь это мало что меняет. С помощью XML Schema я был вынужден избегать таких "двусмысленностей", хотя регулярные выражения могут с ними справиться.

Да, правильный:

[1-9]|1[0-2]

В противном случае вы не получите 10.

Вот лучший ответ, с точным соответствием от 1 до 12.

(^0?[1-9]$)|(^1[0-2]$)

Предыдущие ответы не очень хорошо работают с проверкой регулярных выражений ввода HTML, где некоторые значения, такие как "1111" или "1212", все равно будут воспринимать его как допустимый ввод.

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

[1-9]|1[012]

Как насчет:

^[1-9]|10|11|12$

Соответствует 0-9, или 10, или 11, или 12. и все, больше ничего не найдено.

Используйте следующий шаблон (0?[1-9]|1[0-2])используйте это, которое вернет значения от 1 до 12января по декабрь ), даже если оно изначально начинается с 0 (01, 02, 03, ..., 09, 10, 11, 12)

Вы можете попробовать это:

^[1-9]$|^[1][0-2]$

Правильный шаблон для проверки чисел от 1 до 12 следующий:

(^[1-9][0-2]$)|(^[1-9]$)

Приведенное выше выражение полезно, когда у вас есть ввод с номером типа, и вам нужно, например, проверить месяц. Это связано с тем, что номер типа ввода игнорирует 0 перед любым числом, например: 01 он возвращает 1.

Вы можете увидеть это в действии здесь: https://regexr.com/5hk0s

если вам нужно проверить строковые числа, я имею в виду, когда вы используете ввод с типом текста, но ожидаете числа, например: месяц истечения срока действия карты или месяцы, приведенное ниже выражение может быть полезно для вас:

((^0[1-9]$)|(^1[0-2]$))

Вы можете увидеть это в действии здесь https://regexr.com/5hkae

Я надеюсь, что это очень поможет, потому что это очень сложно.

С уважением.

В python это соответствует любому числу от 1 до 12:

12|11|10|9|8|7|6|5|4|3|2|1

Порядок убывания имеет значение. В порядке возрастания 10, 11 и 12 будут соответствовать 1, поскольку регулярное выражение обычно выбирает первое совпадающее значение.

Другие вопросы по тегам