Esta es una tarea bastante común. La forma más sencilla que conozco para tratar con él es la siguiente:
^[+-]?(\d*\.)?\d+$
También hay otras complicaciones, tales como si desea permitir ceros o comas o cosas por el estilo que lleva. Esto puede ser tan complicado como quieras que sea. Por ejemplo, si desea permitir que el formato 1,234,567.89, se puede ir con esto:
^[+-]?(\d*|\d{1,3}(,\d{3})*)(\.\d+)?\b$
Eso \b
hay una ruptura palabra, pero lo estoy usando como una forma disimulada para requerir al menos un número en el final de la cadena. De esta forma, una cadena vacía o un solo +
no coincidirá.
Sin embargo, tenga en cuenta que expresiones regulares no son la forma ideal para analizar cadenas numéricas. Todos los lenguajes de programación modernos que conozco tienen métodos rápidos, simples e incorporados para hacerlo.
La mejor respuesta, en lugar de un artículo de investigación está aquí: https://stackoverflow.com/a/39399503/715269 – Gangnus