Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Front-end

Crear una máscara de Teléfono con Javascript

Felipe Nascimento
Felipe Nascimento
25/09/2020

Compartir

Mira este artículo:
  1. Capturando el valor del input
  2. Teléfono fijo o móvil
  3. Eliminando el Guión
  4. Método slice
  5. El evento onblur
  6. El evento onfocus
  7. Para saber más

Una editora de libros tiene en su sitio una página de hable con nosotros para atender mejor a sus clientes. En esta página se creó un formulario con nombre, dirección y teléfono. El problema es que, el campo de teléfono está sin formato permitiendo que el cliente ingrese los números que quiere. Con eso el campo puede recibir un número como:

Y sería difícil saber si ese número es un teléfono fijo o un móvil. Es decir, es confuso ya sea para el cliente que está ingresando el teléfono en el campo, o para el backend que recibe esta información. El formato esperado para teléfonos móviles, por ejemplo sería:

Entonces, lo que vamos a hacer es encontrar una manera de solucionar nuestro problema y llegar al resultado esperado utilizando JavaScript.

Capturando el valor del input

El tramo del html donde colocamos el número de teléfono está de la siguiente manera:

<div>
  <input type="text" placeholder="9999-9999 o 9999-99999"  />    
</div>

Lo que queremos ahora es capturar el número digitado por el cliente, entonces vamos a crear una variable para que nos ayude en esta tarea:

  • El textoActual es el responsable por capturar el número del teléfono.

Vamos a aprovechar y encapsular nuestro código dentro de una función, pensando en facilitar la legibilidad y futuros mantenimientos en nuestro código.

function mascaraDeTelefono( teléfono ){
    const textoActual = telefono.value;
}

Ahora ya tenemos el value del input, falta encontrar una manera de decir si el número de teléfono es fijo o móvil.

Teléfono fijo o móvil

Desarrollaremos una lógica que consistirá en un if else que confirmará el tipo de teléfono y luego pasaremos este número al variable telefono ya formateado.

function mascaraDeTelefono(telefono){
    const textoActual = telefono.value;
    const isCelular = textoActual.length === 9;
    let textoAjustado;
        if(isCelular) {
         // hace alguna cosa 
        } else {
         // hace alguna cosa
        }
    telefono.value = textoAjustado;
}

Ahora lo que queremos es una manera de formatear estos números en el siguiente estándar: XXXXX-XXXX para móvil y XXXX-XXXX para teléfono fijo.

Eliminando el Guión

Primero eliminaremos el guión del número ingresado, utilizando el método replace que devolverá una nueva string, con un nuevo estándar preestablecido.

function eliminarGuion(teléfono) {
    const textoActual = teléfono.value;
    const textoAjustado = textoActual.replace(/\-/g, '');
    telefono.value = textoAjustado;
}

Método slice

Como el input que capturamos es una string, y ya eliminamos el guión del número, una posible solución para nuestro problema de formateo es contar cuantos caracteres tienen esta string y enseguida cortarla en dos partes - una antes y otra después del guión. Una manera de cortar la string es por el método slice.

El slice nos permite manipular arrays y strings (son arrays de caracteres), devolviendo solamente el tramo que elegimos.

Cómo dividiremos la secuencia de números en dos partes, creamos dos variables que recibirán estas partes y otra que será responsable por formatear los números:

  • const parte1, que tomará la primera posición hasta la posición 5
  • const parte2, que tomará de la posición 5 hasta la última posición
  • textoAjustado, que interpolará el resultado de las dos variables con el guión
let textoAjustado;
    if(isCelular) {
        const parte1 = textoActual.slice(0,5);
        const parte2 = textoActual.slice(5,9);
        textoAjustado = `${parte1}-${parte2}`        
    } else {
        const parte1 = textoActual.slice(0,4);
        const parte2 = textoActual.slice(4,8);
        textoAjustado = `${parte1}-${parte2}`
    }
    telefono.value = textoAjustado;
}

Con el código listo tenemos el siguiente resultado:

¡Excelente! Conseguimos formatear como queríamos. Ahora, con lógica lista necesitamos encontrar una manera de disparar esta función todas las veces que el cliente haya ingresado el teléfono en el campo.

El evento onblur

El evento blur se activa cuando un elemento pierde el foco, es decir, después que el cliente haya ingresado el teléfono y pulse en otro campo, el evento onblur se dispara accionando nuestra función y realizando el formateo del teléfono.

Pasamos el this como parámetro de la función para decir que el parámetro está dentro del contexto de nuestra función.

<div>
   <input type="text" onblur="mascaraDeTelefono(this)" 
          placeholder="9999-9999 o 9999-99999"/>
</div>

El evento onfocus

Con la función lista, la uniremos al evento onfocus que será responsable por disparar nuestra función, mientras el campo del input esté en enfocado.

 <div>
   <input type="text" onblur="mascaraDeTelefono(this)" 
          placeholder="9999-9999 o 9999-99999" 
          onfocus="tiraHifen(this)" />    
 </div>

Como vimos, las validaciones son siempre problemas complejos en virtud de las innúmeras posibilidades de interacción del usuario.

Para saber más

Otra posibilidad de hacer nuestro formateo sería a través de las expresiones regulares, que no son más que combinaciones de caracteres que utilizamos para seleccionar otros caracteres en strings.

En nuestro caso, podríamos utilizar la siguiente expresión regular para formatear el número del móvil, por ejemplo:

let textoAjustado;
    if(isCelular) {
        textoAjustado = textoActual.replace(/(\d{5})(\d{4})/,
                        function( regex, arg1, arg2) {
                        return arg1 + '-' + arg2 ;
                        });
        telefono.value = textoAjustado;
}

Si te interesa este tema, aquí en Alura tenemos capacitaciones de front-end, para principiantes y para aquellos que ya son desarrolladores web. En ellas, verás cómo programar en Javascript, HTML y CSS para construir sitios web.

Felipe Nascimento
Felipe Nascimento

Desenvolvedor e instrutor na Alura com foco em JavaScript.

Artículo Anterior
Formatear números en JavaScript
Siguiente Artículo
¿Qué es front-end y back-end?

Ver otros artículos sobre Front-end

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast