Permitir solo números en un campo de texto con Javascript

Facebook
Twitter
LinkedIn
Que tal amigos lectores, en este pequeño pero muy útil post veremos cómo podemos restringir que un usuario solo pueda escribir números en un campo de texto de un formulario HTML, utilizando diferentes técnicas desde atributos HTML como validaciones usando javascript.

Campo tipo numérico

A partir de la versión 5 de HTML se introdujo el campo tipo numérico, usar este campo es nuestra primera opción para restringir al usuario que solo puede introducir dígitos mientras escribe.

La etiqueta es la siguiente:

<input type="number" id="age" name="age" /> 

La mayoría de los navegadores hoy en día soportan este tipo de campo, para obtener la lista completa puedes visitar el siguiente enlace: https://caniuse.com/input-number

Puedes encontrar mayor información del campo tipo numérico en el Mozilla Developer Network https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number

Atributo pattern

Si el campo tipo numérico no es una opción, una alternativa es usar el atributo pattern que te permite definir mediante expresiones regulares como debe ser el formato que el usuario debe usar para escribir en ese input.

La etiqueta es la siguiente:

<input type="text" id="age" name="age" pattern="[0-9]+" /> 

La expresión regular [0-9] se traduce en solo dígitos y junto al modificador + significa que puede ser uno o más dígitos.

Validación mediante Javascript

En el siguiente ejemplo vamos a permitir solo números en nuestro campo de texto mediante el uso de Javascript.

El primer paso será crear una función en Javascript que validará que tecla el usuario ha presionado, esta función recibe como parámetro un evento del cual podemos determinar el código ASCII decimal de la tecla presionada.

La función es la siguiente:

<script type="text/javascript">
 function valideKey(evt){
    // code is the decimal ASCII representation of the pressed key.
    var code = (evt.which) ? evt.which : evt.keyCode;
 }
</script> 

Los dígitos del 0 al 9 están en el rango del 48 al 57 de los caracteres visibles del código ASCII, pero también debemos permitir que el usuario pueda borrar los dígitos introducidos, el código ASCII de caracteres de control para esta tecla es el 8, como referencia pueden ver estas tablas

La función completa luce así

<script type="text/javascript">
function valideKey(evt){
    
    // code is the decimal ASCII representation of the pressed key.
    var code = (evt.which) ? evt.which : evt.keyCode;
    
    if(code==8) { // backspace.
      return true;
    } else if(code>=48 && code<=57) { // is a number.
      return true;
    } else{ // other keys.
      return false;
    }
}
</script> 
El último paso es conectar nuestra función de validación con el campo de texto que queremos restringir solo para números, para esto vamos a usar el evento javascript onkeypress que le indica al navegador que ejecute nuestra función valideKey cada vez que el usuario presiona una tecla antes de mostrar su respectivo valor en el campo de texto.
<input type="text" name="age" id="age" onkeypress="return valideKey(event);" /> 

El código final nos queda de la siguiente manera

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Age Validation</title>
        <script type="text/javascript">
		function valideKey(evt){
			
			// code is the decimal ASCII representation of the pressed key.
			var code = (evt.which) ? evt.which : evt.keyCode;
			
			if(code==8) { // backspace.
			  return true;
			} else if(code>=48 && code<=57) { // is a number.
			  return true;
			} else{ // other keys.
			  return false;
			}
		}
		</script>
    </head>

    <body>
        <form action="" method="post">
            <label for="age">Age:</label>
            <input type="text" name="age" id="age" onkeypress="return valideKey(event);" />
            <input type="submit" value="Save" />
        </form>
    </body>
</html> 

Permitir solo números usando jQuery

jQuery es una librería javascript muy popular que permite ejecutar código lo más compatible posible entre los distintos navegadores.

Lo primero que tenemos que hacer es cargar la librería jQuery en nuestro código HTML, usualmente en el <head> de nuestro documento colocamos el siguiente tag

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
Luego colocamos nuestro código de validación cuando ya jQuery está listo para procesar los eventos en el jQuery(document).ready, generalmente al antes de cerrar el </body>
<script type="text/javascript">
// Initialize our function when the document is ready for events.
jQuery(document).ready(function(){
	// Listen for the input event.
	jQuery("#age").on('input', function (evt) {
		// Allow only numbers.
		jQuery(this).val(jQuery(this).val().replace(/[^0-9]/g, ''));
	});
});
</script> 

Todo junto nos queda

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Age Validation</title>
		<!-- Include jQuery library -->
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>

    <body>
        <form action="" method="post">
            <label for="age">Age:</label>
            <input type="text" name="age" id="age" />
            <input type="submit" value="Save" />
        </form>
		<script type="text/javascript">
		// Initialize our function when the document is ready for events.
		jQuery(document).ready(function(){
			// Listen for the input event.
			jQuery("#age").on('input', function (evt) {
				// Allow only numbers.
				jQuery(this).val(jQuery(this).val().replace(/[^0-9]/g, ''));
			});
		});
		</script>
    </body>
</html> 

Nunca están demás estos pequeños tips que te pueden sacar de apuros.

Te podría interesar
Almacenamiento en la nube
Tecnología

Almacenamiento en la nube

El almacenamiento en la nube (o Cloud Storage en inglés) es un servicio que permite crear, editar y administrar archivos de manera remota los cuales pueden ser accedidos desde cualquier dispositivo o computador.

Leer Más >>
Tecnología

Mailgun

Mailgun es un servicio brindado por Rackspace, el mismo te permite enviar y recibir correos de forma segura y confiable, una de sus principales características es la posibilidad de dar seguimiento y verificar las estadísticas de los correos.

Leer Más >>
Tips

Custom Web Fonts

Con la entrada de HTML5 se han abierto muchas puertas para poder utilizar un Font que no es estándar dentro de nuestra página, esto lo podemos lograr de utilizando la regla CSS3 @font-face, la librería Cufón de Javascript o servicios de Fonts en línea como lo es Google WEB Fonts.

Leer Más >>

12 respuestas

  1. I am reallʏ impreѕsed along with your writіng talents and also with the layout
    to your blog. Is this a paid theme or did you modify it yоurѕelf?
    Either way stay up the nice high quality writing, it’s
    rare to peer a great weblog like thіs one nowaԁays..

    1. Que tal Jose,

      Puedes agregar un OR en el if que verifica el backspace, para que permita otros caracteres, el punto en código ASCII es el 46, quedaría de la siguiente manera if ( code==8 || code==46 )

  2. Hello There. I found your blog using msn. Thiss is
    a really well written article. I wil be sure to bookmark
    it and return to read more of your useful info.
    Thanks for the post. I’ll certainly comeback.

  3. Simply desire to say your article is as astounding.
    The clarity in your post is simply excellent and i could assume you’re an expert on this subject.
    Well with your permission let me to grab your RSS
    feed to keep updated with forthcoming post. Thanks a million and please carry on the gratifying
    work.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *