Depende de si desea un campo int o flotante. Así es como se verían los dos:
<input type="number" name="int-field" id="int-field" placeholder="positive int" min="1" step="1">
<input type="number" name="float-field" id="float-field" placeholder="positive float" min="0">
El campo int tiene la validación correcta adjunta, ya que su mínimo es 1. Sin embargo, el campo flotante acepta 0; Para lidiar con esto, puede agregar un validador de restricción más :
function checkIsPositive(e) {
const value = parseFloat(e.target.value);
if (e.target.value === "" || value > 0) {
e.target.setCustomValidity("");
} else {
e.target.setCustomValidity("Please select a value that is greater than 0.");
}
}
document.getElementById("float-field").addEventListener("input", checkIsPositive, false);
JS Violín aquí.
Tenga en cuenta que ninguna de estas soluciones impide por completo que el usuario intente escribir una entrada no válida, pero puede llamar checkValidity
oreportValidity
averiguar si el usuario ha ingresado una entrada válida.
Por supuesto, aún debe tener la validación del lado del servidor porque el usuario siempre puede ignorar la validación del lado del cliente.