Tengo un <input type="number">
y quiero restringir la entrada de los usuarios a números puramente o números con decimales de hasta 2 decimales.
Básicamente, estoy pidiendo una entrada de precio.
Quería evitar hacer expresiones regulares. ¿Hay una manera de hacerlo?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
recurren de todos modos, entonces, ¿qué importa?Respuestas:
En lugar de
step="any"
, que permite cualquier número de lugares decimales, usestep=".01"
, que permite hasta dos lugares decimales.Más detalles en la especificación: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
fuente
500.12345
en cualquiera de las entradas, quizás nuestra comprensión de los requisitos es diferente.:valid
y:invalid
se aplicarán como se espera.En caso de que alguien esté buscando una expresión regular que permita solo números con 2 decimales opcionales
Por ejemplo, he encontrado que la solución a continuación es bastante confiable
HTML:
JS / JQuery:
fuente
setTimeout()
es esperarkeydown
a que se complete el evento antes de configurarlonewVal
(de lo contrario, será lo mismo queoldVal
). Sin embargo, con un tiempo de espera de 0, no tiene sentido y no funciona ya que ambos valores son a menudo los mismos (en Firefox). Si lo establece en 1, por ejemplo, funciona bien.Por moneda, sugeriría:
Ver http://jsfiddle.net/vx3axsk5/1/
Las propiedades HTML5 "step", "min" y "pattern" se validarán cuando se envíe el formulario, no onblur. No necesita el
step
si tiene unpattern
y no necesita unpattern
si tiene unstep
. Entonces podría volver astep="any"
mi código ya que el patrón lo validará de todos modos.Si desea validar onblur, creo que darle al usuario una señal visual también es útil, como colorear el fondo de rojo. Si el navegador del usuario no es compatible
type="number"
, recurrirá atype="text"
. Si el navegador del usuario no admite la validación de patrones HTML5, mi fragmento de JavaScript no impide que el formulario se envíe, pero da una señal visual. Por lo tanto, para las personas con poco soporte de HTML5 y para las personas que intentan piratear la base de datos con JavaScript deshabilitado o falsificar solicitudes HTTP, de todos modos debe validar en el servidor. El punto con la validación en el front-end es para una mejor experiencia de usuario. Por lo tanto, siempre que la mayoría de sus usuarios tengan una buena experiencia, está bien confiar en las características de HTML5, siempre que el código siga funcionando y pueda validarlo en el back-end.fuente
pattern
no funciona parainput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Paso 1: conecta el cuadro de entrada de tu número HTML a un evento onchange
o en el código HTML
Paso 2: escribe el
setTwoDecimalPlace
métodoPuede alterar el número de decimales variando el valor pasado al
toFixed()
método. Ver documentos de MDN .fuente
Descubrí que usar jQuery era mi mejor solución.
fuente
Pruebe esto para permitir solo 2 decimales en el tipo de entrada
O use jQuery como lo sugiere @SamohtVII
fuente
Usa este código
Por defecto, el valor de Paso para los elementos de entrada HTML5 es step = "1".
fuente
solo escribe
lang = 'nb "te permite escribir tus números decimales con coma o punto
fuente
En entrada:
En guión:
fuente