2010-03-22 31 views
6

estoy usando la siguiente expresión regular para validar los números de mi archivo javascript:Validación javascript números decimales

var valid = (val.match(/^\d+$/)); 

Funciona bien para los números enteros como 100, 200, etc, sin embargo, por cosas como 1,44, 4,11, etc., devuelve falso. ¿Cómo puedo cambiarlo para que los números con un decimal también sean aceptados?

Respuesta

27
var valid = (val.match(/^\d+(?:\.\d+)?$/)); 

Partidos:

1 : yes 
1.2: yes 
-1.2: no 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^-?\d+(?:\.\d+)?$/)); 

Partidos:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?\d+(?:\.\d+)?$/)); 

Partidos:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?(?:\d*\.?\d+$/)); 

Partidos:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : no 

var valid = (val.match(/^[-+]?(?:\d+\.?\d*|\.\d+)$/)); 

Partidos:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : yes 
3

probar esto:

^[-+]?\d+(\.\d+)?$ 
+1

"4." es técnicamente un número decimal válido, pero esta expresión regular no coincidirá con eso. Debería hacer que los dígitos '\ d +' del grupo sean opcionales. –

0

Si desea aceptar decimales (incluyendo < 1) y enteros, con opcional de signos + o -, se podría utilizar válido = Número (val).

O una expresión regular:

valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val); 
3

isNaN parece una solución mejor para mí.

> isNaN('1') 
false 
> isNaN('1a') 
true 
> isNaN('1.') 
false 
> isNaN('1.00') 
false 
> isNaN('1.03') 
false 
> isNaN('1.03a') 
true 
> isNaN('1.03.0') 
true 
+0

funciona perfectamente bien con positivo/negativo también – seanmonstar

0

! IsNaN (texto) & & parseFloat (texto) == texto

Cuestiones relacionadas