¿Cuál es la expresión regular para un decimal con una precisión de 2?
Ejemplos válidos :
123.12
2
56754
92929292929292.12
0.21
3.1
Ejemplos inválidos:
12.1232
2.23332
e666.76
El punto decimal puede ser opcional y también se pueden incluir enteros.
Respuestas:
Los tokens regex válidos varían según la implementación. Una forma genérica es:
Mas Compacto:
Ambos suponen que ambos tienen al menos un dígito antes y uno después del decimal.
Para requerir que toda la cadena sea un número de esta forma, ajuste la expresión en etiquetas de inicio y fin, como (en la forma de Perl):
Para hacer coincidir los números sin un dígito
.12
inicial antes del decimal ( ) y los números enteros que tienen un punto final (12.
) mientras excluye la entrada de un solo punto (.
), intente lo siguiente:Adicional
Envuelto la porción fraccional
()?
para hacerlo opcional. Tenga en cuenta que esto excluye formas como12.
Incluir que serían más similares^\d+\\.?\d{0,2}$
.Adicional
Úselo
^\d{1,6}(\.\d{1,2})?$
para detener la repetición y restringir toda la parte del valor decimal.fuente
-?
, como en-?\d+(\.\d{1,2})?
. No incluí negativos ni comencé con un punto decimal, ya que no estaban en la pregunta del OP, aunque ciertamente son válidos para un formato de número más genérico. El hilo de comentarios aquí da algunas formas de manejar ".21".Y dado que las expresiones regulares son horribles de leer, mucho menos entender, aquí está el equivalente detallado:
Puede reemplazar
[0-9]
con la\d
mayoría de las implementaciones de expresiones regulares (incluidas PCRE , el más común). Lo dejé como[0-9]
creo que es más fácil de leer.Además, aquí está el script simple de Python que utilicé para verificarlo:
fuente
+
después del primer par de cierre,^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
lugar de\.
porque.
parecerá que funciona, pero coincide con cualquier carácter (no solo el lugar decimal). Por ejemplo, ambos1z23
y1.23
podrían considerarse válidos si no se escapaPara incluir un signo menos opcional y no permitir números como
015
(que pueden confundirse con números octales) escriba:fuente
Para los números que no tienen un separador de miles, me gusta esta expresión regular simple y compacta:
o, para no limitarse a una precisión de 2:
Este último coincide con
1
100
100.
100.74
100.7
0.7
.7
.72
Y no coincide con una cadena vacía (como \ d *.? \ D * would)
fuente
Utilizo este para hasta dos decimales:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
pasa:.25
0.25
10.25
+0.25
no pasa:
-.25
01.25
1.
1.256
fuente
Hará cosas como
12.
aceptadas. Esto no es lo que comúnmente se acepta, pero si necesita ser "flexible", ese es un camino a seguir. Y, por supuesto,[0-9]
se puede reemplazar con\d
, pero supongo que es más legible de esta manera.fuente
Prueba esto
Permitirá signos positivos y negativos también.
fuente
La respuesta principal es INCORRECTA porque es válida
5.
o5,
entradaseste código lo maneja (pero en mi ejemplo los números negativos están prohibidos):
los resultados son abajo:
fuente
fuente
En general, es decir, decimales ilimitados:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.fuente
¿No necesitarás tener
e
ene666.76
cuenta?Con
fuente
agregando mi respuesta también, alguien puede encontrarla útil o puede ser correcta la mía también.
fuente
Esto funcionó conmigo:
El grupo 1 es su número flotante y el grupo 2 es solo la fracción.
fuente
Intenté uno con mi proyecto. Esto permite números con
+ | -
signos también.fuente
Chrome 56 no acepta este tipo de patrones (Chrome 56 está aceptando 11.11. Un adicional) con el número de tipo, use el tipo como texto como progreso.
fuente
Esto permitirá decimales con exponenciación y hasta 2 dígitos,
Manifestación
fuente
1.2e-10
([0-9]+)?
Está mejor escrito\d*
. Ahora no coincide10e3
. Y OP quiere hacer coincidir hasta 2 dígitos.la función validará cualquier número decimal, el número de clima tiene decimales o no, dirá "Número correcto" de otra manera "Por favor ingrese solo números en el cuadro de texto de cantidad". aparecerá un mensaje de alerta.
Gracias... :)
fuente