Necesito una expresión regular que valide el número de coma flotante, construí lo siguiente.
<label for="salary">Enter floating nunmber:</label> <input type="text" id="salary" name="salary" oninput="this.value = this.value.replace(/[^-0-9.]/g, '').replace(/(\..*)\./g, '$1').replace(/(\-.*)\-/g, '$1');" /> Funciona pero falla en el caso de 11-111 . Como lo arreglo.
Tal vez algo como esto:
const validateFloat = (e) => { let val = e.currentTarget.value; if(isNaN(val)){ val = val.replace(/[^-0-9\.]/g,''); if(val.split('.').length>2) val =val.replace(/\.+$/,""); } e.currentTarget.value = val; }Usando:
input.addEventListener("input", validateFloat);Trabajando con valores negativos también.
Puede usar this.value.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1') como:
<label for="salary">Enter floating nunmber:</label> <input type="text" id="salary" name="salary" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1')" />El tipo de validación de entrada que está intentando aquí será monstruoso en un solo regEx, por lo que sería mejor dividirlo en varios más pequeños.
/[^0-9-.]/g para eliminar cualquier carácter no válido/(-.*)-/g para eliminar cualquier extra -/(\..*)\./g para eliminar cualquier archivo .esto se vería así
let val = '-abc123.45.67-89'; val = val.replace(/[^0-9-.]/g, ''); val = val.replace(/(-.*?)-/g, '$1'); val = val.replace(/(\..*?)\./g, '$1'); console.log(val) //"-123.456789"si está realizando esto en cada entrada de caracteres, entonces debería funcionar bien, sin embargo, en la entrada masiva (es decir, una pegada), es posible que deba repetir los reemplazos para tener en cuenta que las coincidencias anteriores no se incluirán en la próxima coincidencia
p.ej
let val = '-123-abc.123.45.67-89'; val = val.replace(/[^0-9-.]/g, ''); const minusMatch = /(-.*?)-/g; while(val.search(minusMatch)>=0){ val = val.replace(minusMatch, '$1'); } const dotMatch = /(\..*?)\./g; while(val.search(dotMatch)>=0){ val = val.replace(dotMatch, '$1'); } console.log(val)