En JavaScript, podemos usar expresiones regulares (RegEx) para validar si un string tiene formato de moneda (currency). Un formato típico incluye:
$
, €
, £
, etc.).
,
, .
dependiendo del país).
const currencyRegex = /^(\$|€|£)?\s?(\d{1,3}(\,\d{3})*|\d+)(\.\d{1,2})?$/;
1. ^
→ Inicio de la cadena.
2. (\$|€|£)?
→ Permite símbolos $
, €
, £
opcionales.
3. \s?
→ Espacio opcional después del símbolo.
4. (\d{1,3}(\,\d{3})*|\d+)
→
\d{1,3}(\,\d{3})*
→ Permite separadores de miles (1,000,000
).
|\d+
→ O simplemente números (1000
).
5. (\.\d{1,2})?
→ Opcionalmente, hasta dos decimales (.00
).
6. $
→ Fin de la cadena.
function isCurrency(value) {
const currencyRegex = /^(\$|€|£)?\s?(\d{1,3}(\,\d{3})*|\d+)(\.\d{1,2})?$/;
return currencyRegex.test(value);
}
// Ejemplos válidos
console.log(isCurrency("$1,000.50")); // true
console.log(isCurrency("€1000.99")); // true
console.log(isCurrency("£10")); // true
console.log(isCurrency("1,234")); // true
console.log(isCurrency("500.5")); // true (permite un decimal)
// Ejemplos inválidos
console.log(isCurrency("$1,000.999")); // false (más de dos decimales)
console.log(isCurrency("1,23,000")); // false (mal uso de separadores)
console.log(isCurrency("ABC")); // false (no es número)
console.log(isCurrency("1000.")); // false (decimal sin cifras)
console.log(isCurrency("1000,00")); // false (coma en lugar de punto para decimales)
Si en lugar de .
para decimales y ,
para miles necesitas el formato europeo ("1.000,50" en lugar de "1,000.50"), puedes modificar la expresión así:
const euroCurrencyRegex = /^(\$|€|£)?\s?(\d{1,3}(\.\d{3})*|\d+)(\,\d{1,2})?$/;
En este caso:
\.
para miles.
\,\d{1,2}
para los decimales.
console.log(euroCurrencyRegex.test("1.000,50")); // true
console.log(euroCurrencyRegex.test("1000,99")); // true
console.log(euroCurrencyRegex.test("10.000")); // true
console.log(euroCurrencyRegex.test("1000.50")); // false (decimal incorrecto)
test()
con una RegEx permite evaluar si un string tiene formato de moneda.
1,000.50
vs 1.000,50
).
Jorge García
Fullstack developer