Formatear dinero usando AlpineJS

Alpine nos provee de una función $money que nos permite formatear números de forma sencilla y rápida.

Formatear dinero usando AlpineJS
Photo by 金 运 / Unsplash

Como ya vimos en este artículo sobre máscaras en AlpineJS, es posible aplicar máscaras a textos de forma muy sencilla utilizando x-mask.

Otra de las posibilidades que nos proporciona Alpine es la de utilizar máscaras dinámicas, que cambien según el input del usuario. Por ejemplo:

<input x-mask:dynamic="
    $input.startsWith('34') || $input.startsWith('37')
        ? '9999 999999 99999' : '9999 9999 9999 9999'
">

En este caso, dependiendo del comienzo de la string que escribamos en el input, la máscara será una u otra. Sin embargo, cuando tratamos con dinero la cosa se pone más complicada:

  • El número de caracteres es variable
  • Puede haber decimales o no
  • Hay que ir cambiando los separadores de miles a medida que se escribe

Por ello, Alpine ya ha creado una función $money que podemos usar para formatear cantidades:

<input x-mask:dynamic="$money($input)">
Ejemplo de formateo de número usando $money

Además, si queremos cambiar el separador de miles por un "." (y los decimales por una coma), podemos pasarle un segundo parámetro a la función:

<input x-mask:dynamic="$money($input, ',')">

¡Y ya estaría todo! Gracias a esta pequeña función de Alpine formatear números es bastante sencillo.