Volver a la página principal
martes 11 febrero 2025
5

Cómo evaluar si un formato es currency con una expresión regular en JavaScript

En JavaScript, podemos usar expresiones regulares (RegEx) para validar si un string tiene formato de moneda (currency). Un formato típico incluye:

  • Símbolo opcional de moneda ($, , £, etc.).
  • Números enteros o decimales.
  • Separadores opcionales de miles (,, . dependiendo del país).
  • Máximo de dos decimales (en la mayoría de las monedas).

Expresión regular para validar moneda en JavaScript

const currencyRegex = /^(\$|€|£)?\s?(\d{1,3}(\,\d{3})*|\d+)(\.\d{1,2})?$/;

Explicación de la RegEx:

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.

Ejemplos de uso en JavaScript

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)

Adaptando la RegEx a otros formatos

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:

  • Se usa \. para miles.
  • Se usa \,\d{1,2} para los decimales.

Ejemplo con formato europeo

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)

Conclusión

  • test() con una RegEx permite evaluar si un string tiene formato de moneda.
  • Se puede adaptar la expresión regular para distintos formatos (1,000.50 vs 1.000,50).
  • Considera que algunos sistemas usan bibliotecas como Intl.NumberFormat en lugar de RegEx para manejar formatos de moneda de forma más precisa.
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer