Por moneda, sugeriría:
<div><label>Amount $
<input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>
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 un pattern
y no necesita un pattern
si tiene un step
. Entonces podría volver a step="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 compatibletype="number"
, recurrirá a type="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.