C# Regex. Запретить совпадение с пустой строкой

У меня есть некий паттерн regex ^[0-9]*(?:\.[0-9]*)?$, который проверяет строку на число.

Всё хорошо, но пустую строку он считает за совпадение. Можно ли этого избежать без if(value == "")... else Regex...?


Ответы (2 шт):

Автор решения: Andrei Khotko

Предлагаю такое решение - добавить негативный проход на соответствие любому символу, который встречается ровно 0 раз:

^(?!.{0}$)[0-9]*(?:\.[0-9]*)?$
→ Ссылка
Автор решения: Wiktor Stribiżew

Существует несколько вариантов условия непустой строки:

^(?!$)[0-9]*(?:\.[0-9]*)?$
^(?=.|\n)[0-9]*(?:\.[0-9]*)?$
^(?=[\w\W])[0-9]*(?:\.[0-9]*)?$

где ^(?!$) запрещает конец строки в её начале, а ^(?=[\w\W]) и ^(?=.|\n) требуют наличия хотя бы одного символа в строке.

В данном конкретном случае, наверное, лучшим выражением будет

^[0-9]*\.?[0-9]+$

См. пример работы регулярного выражения.

Подробности

  • ^ - начало строки
  • [0-9]* - ноль и более цифр
  • \.? - опциональная точка
  • [0-9]+ - одна и более цифр
  • $ - конец строки.
→ Ссылка