Quiero hacer un número decimal que sea mayor que 0 y menor que 1, con un máximo de 3 decimales. Entonces 0, 0.0004, 0.00, 00.004, NO son válidos. Pero 0.004 es válido.
Pensé que esto sería simple, pero no pude hacerlo funcionar. Esto es lo que se me ocurrió: /^0(?:\.)([1-9]{1,3}?$)/g que hace que 0.004 no sea válido pero 0.004 es válido.
Puede usar esta expresión regular con una afirmación de anticipación negativa para no permitir todos los ceros después del punto:
^0\.(?!0+$)\d{1,3}$Detalles RegEx:
^ : Inicio0\. : Partido 0.(?!0+$) : Asegúrese de que no tengamos ceros delante\d{1,3} : Combina de 1 a 3 dígitos$ : FinLa expresión regular anterior usa anclas asumiendo solo uno de esos números por línea. Si hay varios números decimales por línea, use límite de palabras en lugar de anclas:
\b0\.(?!0+$)\d{1,3}\b Si no se permite el 0 final después del punto, utilice:
^0\.\d{0,2}[1-9]$ \b0\.\d{0,2}[1-9]\bSi bien las expresiones regulares tienden a ser cortas, también son crípticas. Si estás abierto a alternativas:
const validate = n => { n = Number.parseFloat(n) * 1000; return Number.isInteger(n) && n > 0 && n < 1000; };Esta expresión regular debería hacer el truco.
^0\.\d{1,3}$Puedes probarlo aquí