Estoy escribiendo una función de desinfección de campo de entrada que debería verificar si ese valor de entrada es decimal o no.
Casos de prueba:
1234 - cierto12.34 - verdadero0.123 - verdadero000045 - verdadero000.45 - falso.45685 - falso5..454 - falso55874. - verdadero000000 - verdadero0.0. - falsoNo quiero mostrar un error de validación, solo quiero evitar que los usuarios escriban un valor decimal incorrecto.
Esta expresión regular /^[0-9]+\.?[0-9]+/ cubre todos los casos excepto el 5to punto. Supongo que aquí el único método a usar es String.prototype.replace() para cortar los caracteres incorrectos no deseados.
PD Esta validación es bastante similar a la validación nativa de HTML input type number , excepto el quinto punto, que se acepta como un tipo de número válido.
¡ACTUALIZADO!
const rgx = /^[0-9]+\.?[0-9]+$/ const cases = [ ["1234", true], ["12.34", true], ["0.123", true], ["000045", true], ["000.45", false], [".45685", false], ["5..454", false], ["55874.", true], ['000000', true], ['0.0.', false], ] cases.forEach(([str, result]) => { const actual = rgx.test(str); if (actual !== result) { console.log(`Test case "${str}" failed, gave ${actual} but expected ${result}.`); } });Podría probar si la cadena no comienza con 2 o más ceros
^(?!00+\.)[0-9]+\.?[0-9]*$Demostración de expresiones regulares
Tenga en cuenta que su patrón ^[0-9]+\.?[0-9]+$ coincide con al menos 2 dígitos, ya que solo la coma es opcional.
const rgx = /^(?!00+\.)[0-9]+\.?[0-9]*$/ const cases = ["1234", "12.34", "0.123", "000045", "000.45", ".45685", "5..454", "55874.", "000000", "0.0." ] cases.forEach(s => console.log(`${s} --> ${rgx.test(s)}`));