Это довольно распространенная задача. Самый простой способ я знаю, чтобы справиться с ней заключается в следующем:
^[+-]?(\d*\.)?\d+$
Есть и другие осложнения, такие как, хотите ли вы, чтобы ведущие нули и запятые или тому подобное. Это может быть так сложно, как вы этого хотите. Например, если вы хотите, чтобы формат 1,234,567.89, вы можете пойти с этим:
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
Это \b
есть слово перерыв, но я использую его как подлый способ требует по меньшей мере, одну цифры в конец строки. Таким образом, пустая строка или один +
не совпадают.
Однако будьте уверены, что регулярные выражения не являются идеальным способом для синтаксического анализа числовых строк. Все современные языки программирования, о которых я знаю, имеют быстрые, простые, встроенные методы для этого.
Лучший ответ, а исследовательская статья здесь: https://stackoverflow.com/a/39399503/715269 – Gangnus