Регулярное выражение для диапазона чисел от 0.5 до бесконечности

В регулярных выражениях нет готовых шаблонов для диапазонов чисел, тем более дробных. Потому что регулярки — это в первую очередь обработка текста. Регулярки умеют работать только с отдельными цифрами, а не числами. Но числа — это текст, состоящий из цифр, записаный определенным шаблоном. Т. е. нужно отделять цифры — это знаки 0-9 и числа — составные «слова» из этих знаков.

Делим на подзадачи

Давайте подумаем над задачей. Наша большая задача на самом деле состоит из двух поменьше:

  1. Числа от 0.5 включительно до 1, не включая его в диапазон.
  2. Числа от 1 до ∞ включительно.

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

Числа от 0.5 и больше, но меньше 1

Попробуем записать словами, что хотим получить.

Числа в диапазоне [0.5, 1):

  1. Обязательно начинаются с цифры 0.
  2. Обязательно после нуля должна быть точка или запятая.
  3. Обязательно должна быть цифра от 5 до 9 включительно.
  4. Необязательно могут быть дополнительные цифры после.

^0[.,][5-9]\d{0,}?$ — получилась такая регулярка:

  1. ^ — начало строки (чтобы не искать значения в любой части текста).
  2. 0 — собственно ноль.
  3. [.,] — любой из символов в скобках, в этом случае или запятая или точка.
  4. [5-9] — одна цифра от 5 до 9 включительно.
  5. \d{0,}? — любая цифра; {0,}? — нежадно повторенная 0 или больше раз.
  6. $ — конец строки (чтобы не искать значения в любой части текста).

Числа от 1 до ∞ включительно

Попробуем записать словами, что хотим получить.

  1. Обязательно число должно начинаться на цифру от 1-9, потому что числа меньше 1 нам не подходят.
  2. Необязательно могут быть любые дополнительные цифры после.
  3. Необязательно может быть «хвост» в виде дроби.

^[1-9]\d{0,}?([.,]\d{1,}?){0,1}$ — получилась такая регулярка:

  1. ^ — начало строки (чтобы не выцеплять значения в любой части текста).
  2. [1-9] — цифра от 1 до 9 включительно.
  3. \d{0,}? — любая цифра; {0,}? — нежадно повторенная 0 или больше раз.
  4. ([.,]\d{1,}?){0,1}[.,] — точка или запятая, после которой \d{1,}? одна или несколько цифр нежадно повторенных. Выражение обернули в круглые скобки, чтобы для него целиком задать правило {0,1} — ноль или один раз.
  5. $ — конец строки (чтобы не искать значения в любой части текста).

Все вместе

Осталось самое простое: объединить несколько регулярных выражений в одно. Это довольно просто, нужно обернуть каждое выражение в отдельную группу при помощи круглых скобок (выражение), а потом поставить между выражениями знак ИЛИ — |. Получится (выражение 1)|(выражение 2).

Итог: (^0[.,][5-9]\d{0,}?$)|(^[1-9]\d{0,}?([.,]\d{1,}?){0,1}$)

Примечания

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

  • \d — можно заменить на [0-9]
  • {0,} — можно заменить на *
  • {1,} — можно заменить на +

Также, для удобства, ^ и $ можно вынести из скобок и оставить в единственном экземпляре:

^((0[.,][5-9]\d{0,}?)|([1-9]\d{0,}?([.,]\d{1,}?){0,1}))$