Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

490
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!