Problema: Estoy tratando de lograr los siguientes resultados para los casos de prueba usando un patrón Regex en un html de texto de tipo de entrada.
Buscando cumplir con los siguientes criterios:
Solo numérico: no se permiten caracteres alfabéticos ni especiales
Sin espacios entre dígitos
se permiten dos dígitos después del decimal
No puede ser cero (0)
El primer dígito del límite no puede ser cero (ej: 01200)
testPattern: RegExp = /(?=.*?\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;
Resultados previstos:
AIT
Puede afirmar no comenzar con un cero seguido de solo dígitos, o solo puntos, comas y ceros hasta el final de la cadena.
^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$Explicación
^ Comienzo de cadena(?! Anticipación negativa[0,.]*$ Coincide con ceros opcionales , o . hasta el final de la cadena| O0\d*$ Coincide con 0 y dígitos opcionales al final de la cadena) Anticipación cercana\d{1,3} Coincide con 1-3 dígitos(?:,\d{3})* Opcionalmente repetir la coincidencia , 3 dígitos(?:\.\d{1,2})? Opcionalmente emparejar . y 1-2 dígitos$ Fin de la cadenaDemostración de expresiones regulares
const regex = /^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$/; [ "0", "012", "0.00", "0.0", "0.", "00122", "0.12", "0.01", "1,234.00", "1.00", "123,456", "1.23" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`));