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]+- одна и более цифр$- конец строки.