Encontré esta solución ordenada para mi problema de números negativos https://stackoverflow.com/a/46039201
Aquí está abajo
onInput={(e)=>{ e.target.value = !!e.target.value && Math.abs(e.target.value) >= 0 ? Math.abs(e.target.value) : null; }}Pero tengo un pequeño problema: solo permite números y necesito lugares decimales porque estas entradas son para monedas como la tarifa de activación, el monto de facturación y demás. De lo contrario, la solución anterior funciona a las mil maravillas.
¿Alguien aquí tiene una solución similar o algo que se pueda agregar a esto para que acepte lugares decimales?
Intenté buscar en algunos otros, pero luego el usuario puede escribir -1111 y lo guarda incluso si agrega min={0} al campo de entrada
No fue fácil para mí encontrar una solución. Al final, lo que funcionó fue una combinación de un patrón y un atributo personalizado para almacenar el valor anterior:
const restricted = document.querySelector('#restricted') restricted.addEventListener('keyup', event => { const value = event.target.value; if (!/^[0-9]+\.?[0-9]?$/.test(value) && value !== '') { event.target.value = event.target.getAttribute('data-value'); } else { event.target.setAttribute('data-value', value); } }); <input id="restricted">hacer uso del paso
<input type="number" min="0" step="0.1" oninput="this.value = Math.abs(this.value)">