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