2009-08-13 28 views
60

Tengo un simple textbox en el que los usuarios ingresan el número.
¿Tiene jQuery una función isDigit que me permita mostrar un cuadro de alerta si los usuarios ingresan algo que no sean dígitos?comprobando si el número ingresado es un dígito en jquery

El campo también puede tener puntos decimales.

+0

por lo que se refiere a los números * * * y no dígitos *? –

Respuesta

83

se recomienda usar expresiones regulares:

var intRegex = /^\d+$/; 
var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/; 

var str = $('#myTextBox').val(); 
if(intRegex.test(str) || floatRegex.test(str)) { 
    alert('I am a number'); 
    ... 
} 

O con una sola expresión regular de acuerdo con la sugerencia de @Platinum Azure:

var numberRegex = /^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/; 
var str = $('#myTextBox').val(); 
if(numberRegex.test(str)) { 
    alert('I am a number'); 
    ... 
}  
+0

el número puede tener decimales también. 5001.10 debe ser aceptable – Omnipresent

+0

@Omnipresente - lo siento, pero usted dijo que es Digit, lo editaré. – karim79

+4

Debería haber especificado eso. :-) Puedes usar un regex como este para TODOS (bueno, muchos) números posibles: '/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)? $/'Esto permitirá decimales, signos e incluso notación científica al final si lo desea. Puedes eliminar varias partes como necesites (expresiones regulares estilo Google Perl si necesitas ayuda para saber qué parte es qué, pero debe ser bastante intuitiva). –

0

jQuery es un conjunto de funciones de JavaScript, ¿verdad? De modo que podría usar el soporte de expresiones regulares de JavaScript para validar la cadena. También puede poner esto en una devolución de llamada de jQuery, ya que solo toman cuerpos de función declarados anónimamente y las funciones siguen siendo JavaScript.

Enlace: http://www.regular-expressions.info/javascript.html

1

validación valor no sería una responsabilidad de jQuery. Puedes usar JavaScript puro para esto. Dos maneras que vienen a mi mente son:

/^\d+$/.match(value) 
Number(value) == value 
+0

Dado que su segundo ejemplo usa == y no ===, ¿no escribiría coerción en el lado derecho porque la expresión es verdadera siempre? –

+1

No sé por qué nadie elevó esta respuesta. Utilicé el Número (valor) ... Es perfecto. –

+0

@systemPAUSE La mención de la entrada del usuario y "dígitos" me hace pensar que el valor es una cadena y el motivo de '=='. –

69

Olvídese de las expresiones regulares. JavaScript tiene una función incorporada para esto: isNaN():

isNaN(123)   // false 
isNaN(-1.23)   // false 
isNaN(5-2)   // false 
isNaN(0)    // false 
isNaN("100")   // false 
isNaN("Hello")  // true 
isNaN("2005/12/12") // true 

a llamarlo así:

if (isNaN($("#whatever").val())) { 
    // It isn't a number 
} else { 
    // It is a number 
} 
+0

isNaN no se asegurará de que su entrada no contenga espacios en blanco. isNaN ("42") === falso –

+1

Puede recortar el espacio en blanco con algo como: YouValue.replace (/^\ s * s,/'') .replace (/ \ s \ s * $ /, ''); Más implementaciones de recorte: http://blog.stevenlevithan.com/archives/faster-trim-javascript – doomspork

+0

Enfoque interesante, pero personalmente creo que la expresión regular es más clara que la doble negativa (no es un número no es un número) Aunque me inclinaría a poner la expresión regular en una buena función de utilidad, isDigit(). –

1

Con validation plugin de jQuery que podría hacer algo como esto, suponiendo que la forma se llama forma y el valor para validar se llama nrInput

$("form").validate({ 
      errorElement: "div", 
      errorClass: "error-highlight", 
      onblur: true, 
      onsubmit: true, 
      focusInvalid: true, 
      rules:{ 
       'nrInput': { 
        number: true, 
        required: true 
       } 
      }); 

Esto también maneja valores decimales.

8

hay una manera más simple de comprobar si una variable es un número entero. puede usar la función $ .isNumeric(). p.ej.

$.isNumeric(10);  // true 

esto devolverá verdadero, pero si coloca una cadena en lugar de la 10, obtendrá un valor falso.

Espero que esto funcione para usted.

2

La siguiente secuencia de comandos se puede usar para verificar si el valor es entero válido o no.

function myFunction() { 
    var a = parseInt("10000000"); 
    if (!isNaN(a) && a <= 2147483647 && a >= -2147483647){ 
    alert("is integer"); 
    } else { 
    alert("not integer"); 
    } 
} 
1
String.prototype.isNumeric = function() { 
    var s = this.replace(',', '.').replace(/\s+/g, ''); 
return s == 0 || (s/s); 
} 

uso

'9.1'.isNumeric() -> 1 
'0xabc'.isNumeric() -> 1 
'10,1'.isNumeric() -> 1 
'str'.isNumeric() -> NaN 
0
$(document).ready(function() { 



    $("#cust_zip").keypress(function (e) { 
     //var z = document.createUserForm.cust_mobile1.value; 
     //alert(z); 
     if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 

      $("#errmsgzip").html("Digits Only.").show().fadeOut(3000); 
      return false; 
     } 
    }); 
}); 
+0

¿Podría también agregar una explicación en lugar de simplemente publicar el código? – namezero

Cuestiones relacionadas