Как regex проверить строку цифр в диапазоне от 100000 до 999999999?

Это моя попытка, похоже, работает после тестирования, у любых профессионалов регулярных выражений есть лучшее предложение или есть какие-либо проблемы с этим?

^([1-9]|[1-9]\d|[1-9]\d\d|[1-9]\d\d\d)(\d{5})$

Факторинг первого уровня - это 1\d{5}|[2-9]\d{5}|[1-9]\d{6,8}, второй уровень - это [1-9]\d{5}|[1-9]\d{6,8}, третий уровень - это [1-9]\d{5,8}.

user557597 10.08.2018 18:05

Если ваша строка - str, а желаемый диапазон - n1..n2, вы можете записать (Integer(str) rescue nil)&.between?(n1, n2). n1 (n2) не обязательно должен быть степенью 10 (степень 10 минус единица). & - это недавно представленный Ruby (v2,3) Оператор безопасной навигации. Примечание (Целое число ("0x7a") rescue nil) и. Между? (100, 200) # => true`.

Cary Swoveland 10.08.2018 19:58
1
2
35
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете объединить все регистры в один, указав минимальное и максимальное количество цифр:

^[1-9]\d{5,8}$

Конечно. Не уверен, почему я все усложнял своей попыткой 🙄!

jbk 10.08.2018 17:21

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

(100000..999999999).cover?(input[/\A\d+\z/].to_i)

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