Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

489
Vistas
Javascript, normaliza cadenas de números de teléfono con expresiones regulares

Soy realmente nuevo en las expresiones regulares, pero esto es lo que estoy tratando de hacer.

Tengo una entrada de número de teléfono y necesito que se convierta en una cadena como esta:

'2228883333'

El usuario podría escribirlo como cualquiera de los siguientes:

 222 888 3333 (222) 888 3333 12228883333 1 222 888 3333 1 (222) 888 3333 2228883333 +1 222 888 3333

Quiero permitir que el usuario lo ingrese como sea que esté más acostumbrado y luego convertir el número de teléfono a mi formato deseado en el lado del servidor (NodeJS)

Aquí está la expresión regular que probé de PHP pero no puedo entender cómo hacerlo en Javascript.

 var number = req.body.phone; number = number.replace('~.*(\d{3})[^\d]{0,7}(\d{3})[^\d]{0,7}(\d{4}).*~', '$1$2$3');

¿Alguna idea de cómo lograr esto en NodeJS (Javascript)?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si hace exactamente lo que describió, su sistema fallará la primera vez que alguien intente ingresar un número de teléfono desde fuera de los EE. UU.

Sugeriría mantener el +1 (o solo 1) en el número y agregarlo solo si el número no incluye el código de otro país.

Lo que haría aquí:

  1. elimine cualquier cosa excepto dígitos y un signo más (y posiblemente convierta el 00 inicial en +)
  2. si la cadena comienza con un signo más, no agregue nada
  3. si la cadena comienza con 1, agregue un signo más
  4. si la cadena comienza con cualquier cosa que no sea más o 1, agregue +1

Ejemplo:

 var number = req.body.phone; number = number.replace(/[^\d+]+/g, ''); number = number.replace(/^00/, '+'); if (number.match(/^1/)) number = '+' + number; if (!number.match(/^\+/)) number = '+1' + number;

Ahora, para todos los números:

 222 888 3333 (222) 888 3333 12228883333 1 222 888 3333 1 (222) 888 3333 2228883333 +1 222 888 3333

más algún extra:

 001 222 888 3333 001 (222) 888 3333 001(222)888-3333

deberías tener una representación normalizada, pero esta vez es:

 +12228883333

que admite números internacionales. Puede eliminar el signo más si lo desea:

 number = number.replace(/^\+/, '');

pero recomendaría mantenerlo para que quede claro que este número incluye el código de país para cualquiera que procese esos datos y este es un número que cualquier persona puede marcar directamente en todo el mundo.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto es bastante fácil de hacer con dos reemplazos de expresiones regulares:

 const unformatPhone = phone => phone.replace(/\D/g, '').replace(/^1/, '');

Esto es probablemente mucho más limpio que cualquier cosa que pueda encontrar con una sola expresión regular.

La primera expresión regular, /\D/g coincide con cualquier carácter que no sea un dígito. El segundo, /^1/ coincide con un '1' inicial. Ambos se eliminan reemplazándolos con una cadena vacía.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda