¿Hay una manera rápida de configurar una entrada de texto HTML ( <input type=text />
) para permitir solo las pulsaciones numéricas (más '.')?
javascript
jquery
html
Julius A
fuente
fuente
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Respuestas:
Nota: esta es una respuesta actualizada. Los comentarios a continuación se refieren a una versión anterior que se equivocó con los códigos clave.
JavaScript
Pruébelo usted mismo en JSFiddle .
Puede filtrar los valores de entrada de un texto
<input>
con la siguientesetInputFilter
función (admite Copiar + Pegar, Arrastrar + Soltar, métodos abreviados de teclado, operaciones de menú contextual, teclas que no se pueden escribir, la posición del cursor, diferentes diseños de teclado y todos los navegadores desde IE 9 ) :Ahora puede usar la
setInputFilter
función para instalar un filtro de entrada:Vea la demostración JSFiddle para más ejemplos de filtros de entrada. ¡También tenga en cuenta que aún debe hacer la validación del lado del servidor!
Mecanografiado
Aquí hay una versión de TypeScript de esto.
jQuery
También hay una versión jQuery de esto. Mira esta respuesta .
HTML 5
HTML 5 tiene una solución nativa con
<input type="number">
(consulte la especificación ), pero tenga en cuenta que la compatibilidad del navegador varía:step
,min
ymax
atributos.e
yE
en el campo. También vea esta pregunta .Pruébelo usted mismo en w3schools.com .
fuente
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Usa este DOM
Y este guión
fuente
He buscado largamente una buena respuesta a esto, y la necesitamos desesperadamente
<input type="number"
, pero aparte de eso, estas 2 son las formas más concisas que podría encontrar:Si no le gusta el carácter no aceptado que se muestra durante una fracción de segundo antes de ser borrado, el método a continuación es mi solución. Tenga en cuenta las numerosas condiciones adicionales, esto es para evitar deshabilitar todo tipo de navegación y teclas de acceso rápido. Si alguien sabe cómo compactar esto, ¡háganoslo saber!
fuente
/[^\d+]/
y funciona manteniendo presionada/[^\d]+/
. Buena solución sin embargo. También @ user235859.
. Realmente deberías hacerlo/[^0-9.]/g
Aquí hay uno simple que permite exactamente un decimal, pero no más:
fuente
Y un ejemplo más, que funciona muy bien para mí:
Adjuntar también al evento de pulsación de tecla
Y HTML:
Aquí hay un ejemplo de jsFiddle
fuente
HTML5 tiene
<input type=number>
, lo que suena bien para ti. Actualmente, solo Opera lo admite de forma nativa, pero hay un proyecto que tiene una implementación de JavaScript.fuente
type=number
es que no es compatible con IE9type=number
permitir ele
carácter porque se considerae+10
como número. El segundo problema es que no puede limitar el número máximo de caracteres en la entrada.La mayoría de las respuestas aquí tienen la debilidad de usar eventos clave .
Muchas de las respuestas limitarían su capacidad de seleccionar texto con macros de teclado, copiar + pegar y más comportamientos no deseados, otras parecen depender de complementos específicos de jQuery, que está matando moscas con ametralladoras.
Esta solución simple parece funcionar mejor para mí multiplataforma, independientemente del mecanismo de entrada (pulsación de tecla, copiar + pegar, hacer clic con el botón derecho copiar + pegar, voz a texto, etc.). Todas las macros de teclado de selección de texto seguirían funcionando, e incluso limitarían la capacidad de establecer un valor no numérico por script.
fuente
replace(/[^\d]+/g,'')
reemplazar todos los no dígitos con una cadena vacía. El modificador "i" (sin distinción entre mayúsculas y minúsculas) no es necesario./[^\d,.]+/
Opté por usar una combinación de las dos respuestas mencionadas aquí, es decir
<input type="number" />
y
<input type="text" onkeypress="return isNumberKey(event);">
fuente
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 admite expresiones regulares, por lo que puede usar esto:
Advertencia: algunos navegadores aún no admiten esto.
fuente
<input type=number>
.+
medios en el atributo de patrón?JavaScript
adicional puede agregar coma, punto y menos (, .-)
HTML
fuente
Tan sencillo....
// En una función de JavaScript (puede usar HTML o PHP).
En su formulario de entrada:
Con entrada máx. (Estos anteriores permiten un número de 12 dígitos)
fuente
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 soluciones:
Utilice un validador de formularios (por ejemplo, con el complemento de validación jQuery )
Haga una comprobación durante el evento onblur (es decir, cuando el usuario abandona el campo) del campo de entrada, con la expresión regular:
fuente
var regExpr = /^\d+(\.\d*)?$/;
.123
(en lugar de0.123
) por ejemplo?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Un enfoque más seguro es verificar el valor de la entrada, en lugar de secuestrar las pulsaciones de teclas y tratar de filtrar códigos de teclas.
De esta forma, el usuario puede usar flechas de teclado, teclas modificadoras, retroceso, eliminar, usar teclados no estándar, usar el mouse para pegar, usar arrastrar y soltar texto, incluso usar entradas de accesibilidad.
El siguiente script permite números positivos y negativos.
EDITAR: eliminé mi respuesta anterior porque creo que ahora es anticuada.
fuente
Puedes usar un patrón para esto:
Aquí puede ver los consejos completos para la interfaz del sitio web móvil .
fuente
Encuentre a continuación la solución mencionada. En este usuario solo puede ingresar un
numeric
valor, tampoco el usuario puedecopy
,paste
,drag
ydrop
en la entrada.Avísame si no funciona.
fuente
Si desea sugerir al dispositivo (tal vez un teléfono móvil) entre alfa o numérico, puede usarlo
<input type="number">
.fuente
Un ejemplo más donde puede agregar solo números en el campo de entrada, no puede letras
fuente
Una implementación breve y dulce usando jQuery y replace () en lugar de mirar event.keyCode o event.which:
Solo un pequeño efecto secundario es que la letra escrita aparece momentáneamente y CTRL / CMD + A parece comportarse un poco extraño.
fuente
input type="number"
es un atributo HTML5En el otro caso, esto te ayudará a:
fuente
var charCode = (evt.which) ? evt.which : evt.keyCode;
Código JavaScript:
Código HTML:
funciona perfectamente porque el código de retroceso es 8 y una expresión regex no lo permite, por lo que es una forma fácil de evitar el error :)
fuente
Una manera fácil de resolver este problema es implementar una función jQuery para validar con regex los caracteres escritos en el cuadro de texto, por ejemplo:
Tu código html:
Y la función js usando jQuery
fuente
Solo otra variante con jQuery usando
fuente
simplemente use type = "number" ahora este atributo es compatible con la mayoría de los navegadores
fuente
--1
(2 menos caracteres antes de 1).También puede comparar el valor de entrada (que se trata como una cadena por defecto) a sí mismo forzado como numérico, como:
Sin embargo, debe vincular eso a un evento como keyup, etc.
fuente
fuente
Vi algunas respuestas excelentes, sin embargo, me gustan tan pequeñas y simples como sea posible, por lo que tal vez alguien se beneficie de ello. Usaría JavaScript
Number()
y unaisNaN
funcionalidad como esta:Espero que esto ayude.
fuente
Utiliza este DOM:
Y este guión:
... O este script, sin indexOf, usando dos
for
's ...Usé el atributo onkeydown en lugar de onkeypress, porque el atributo onkeydown se verifica antes que el atributo onkeypress. El problema estaría en el navegador Google Chrome.
Con el atributo "onkeypress", TAB sería incontrolable con "preventDefault" en google chrome, sin embargo, con el atributo "onkeydown", ¡TAB se puede controlar!
Código ASCII para TAB => 9
El primer script tiene menos código que el segundo, sin embargo, la matriz de caracteres ASCII debe tener todas las claves.
El segundo script es mucho más grande que el primero, pero la matriz no necesita todas las claves. El primer dígito en cada posición de la matriz es el número de veces que se leerá cada posición. Para cada lectura, se incrementará 1 a la siguiente. Por ejemplo:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
En el caso de las teclas numéricas son solo 10 (0 - 9), pero si fueran 1 millón, no tendría sentido crear una matriz con todas estas teclas.
Códigos ASCII:
fuente
Esta es una función mejorada:
fuente
La mejor manera (permitir TODOS los tipos de números: negativo real, positivo real, negativo entero, positivo entero) es:
fuente
Esta es la versión extendida de la solución de geowa4 . Soportes
min
ymax
atributos. Si el número está fuera de rango, se mostrará el valor anterior.Puedes probarlo aquí.
Uso:
<input type=text class='number' maxlength=3 min=1 max=500>
Si las entradas son dinámicas, use esto:
fuente