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 3333Quiero 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)?
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í:
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 3333más algún extra:
001 222 888 3333 001 (222) 888 3333 001(222)888-3333deberías tener una representación normalizada, pero esta vez es:
+12228883333que 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.
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.