Estoy trabajando en una aplicación de SMS y necesito poder convertir el número de teléfono del remitente de +11234567890 a 123-456-7890 para que pueda compararse con los registros en una base de datos MySQL .
Los números se almacenan en el último formato para su uso en cualquier otro lugar del sitio y prefiero no cambiar ese formato, ya que requeriría modificar una gran cantidad de código.
¿Cómo haría esto con PHP?
¡Gracias!
php
phone-number
NocheMICU
fuente
fuente
Respuestas:
fuente
sprintf
o `` printf ''? Alguien, por favor, explícamelo. Estoy trabajando con números de teléfono exclusivos de EE. UU. Y no creo que ejecutarlos a través de una función de salida usando una subcadena sea el mejor método.Este es un formateador de teléfonos de EE. UU. Que funciona con más versiones de números que cualquiera de las respuestas actuales.
Y aquí hay un desglose de la expresión regular:
Actualizado: 11 de marzo de 2015 para usar en
{0,7}
lugar de{,7}
fuente
~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})(?:[ \D#\-]*(\d{3,6}))?.*~
.(\d{3}) // 3 digits
[\d]
// carácter que no es un dígito{,7}
debe actualizarse{0,7}
. Actualicé el código.Esta función formateará números de teléfono internacionales (más de 10 dígitos), no internacionales (10 dígitos) o de la vieja escuela (7 dígitos). Cualquier número que no sea 10+, 10 o 7 dígitos permanecerá sin formato.
fuente
Suponiendo que sus números de teléfono siempre tengan este formato exacto, puede usar este fragmento:
fuente
Los números de teléfono son difíciles. Para una solución internacional más sólida, recomendaría este puerto PHP bien mantenido de la biblioteca libphonenumber de Google .
Usándolo así,
obtendrá el siguiente resultado:
Recomendaría usar el
E164
formato para cheques duplicados. También puede verificar si el número es realmente un número de móvil o no (usandoPhoneNumberUtil::getNumberType()
), o si es incluso un número de EE.UU. (usandoPhoneNumberUtil::getRegionCodeForNumber()
).Como beneficio adicional, la biblioteca puede manejar prácticamente cualquier entrada. Si, por ejemplo, elige ejecutar
1-800-JETBLUE
el código anterior, obtendráNeato.
Funciona igual de bien para países que no sean EE. UU. Simplemente use otro código de país ISO en el
parse()
argumento.fuente
number_formatted
columna en mi base de datos e ingresar manualmente los números formateados. Sin embargo, todavía lo usolibphonenumber
localmente para generar los números formateados, pero incluir una biblioteca tan grande para mi pequeño proyecto es simplemente excesivo.Aquí está mi solución exclusiva para EE. UU., Con el código de área como componente opcional, el delimitador requerido para la extensión y comentarios de expresiones regulares:
Y aquí está el script para probarlo:
fuente
Aquí hay una función simple para formatear números de teléfono con 7 a 10 dígitos de una manera más europea (¿o sueca?):
fuente
¡No reinventes la rueda! Importe esta increíble biblioteca:
https://github.com/giggsey/libphonenumber-for-php
Se basa en la biblioteca de Google para analizar, formatear y validar números de teléfono internacionales: https://github.com/google/libphonenumber
fuente
Veo que esto es posible usando algunas expresiones regulares o algunas llamadas a substr (asumiendo que la entrada es siempre de ese formato y no cambia la longitud, etc.)
algo como
Deberías hacerlo.
fuente
Es más rápido que RegEx.
fuente
Prueba algo como:
esto tomaría $ number de
8881112222
y se convertiría en888-111-2222
. Espero que esto ayude.fuente
'.'
también debe actualizarse'-'
o eliminarse. Se incluyó debido al caso de uso particular al que se enfrentó: con muy poco esfuerzo podría haberlo convertidopreg_replace('/\d{3}/', '$0-', substr($number, 2))
y responder la pregunta directamente.Otra opción: actualizar fácilmente para recibir un formato de la configuración.
fuente
Todas,
Creo que lo arreglé. ¡Trabaja para archivos de entrada actuales y tiene las siguientes 2 funciones para hacer esto!
función format_phone_number:
función validate_phone_number:
Observe que tengo esto en una clase lib, por lo que la llamada "self :: validate_phone_number" de la primera función / método.
Observe la línea # 32 de la función "validate_phone_number" donde agregué:
para obtener la devolución falsa necesaria si no es un número de teléfono válido.
Todavía necesito probar esto con más datos, pero trabajando con datos actuales, con el formato actual y estoy usando el estilo '8' para este lote de datos en particular.
También comenté la lógica de la "extensión", ya que constantemente recibía errores, ya que no tengo ninguna de esa información en mis datos.
fuente
esto toma 7, 10 y 11 dígitos, elimina caracteres adicionales y agrega guiones yendo de derecha a izquierda a través de la cadena. cambie el guión a un espacio o un punto.
fuente
Sé que el OP está solicitando un formato 123-456-7890, pero, según la respuesta de John Dul , lo modifiqué para devolver el número de teléfono entre paréntesis, por ejemplo, (123) 456-7890. Este solo maneja números de 7 y 10 dígitos.
fuente
Aquí está mi opinión:
La
sscanf
función toma como segundo parámetro una cadena de formato que le indica cómo interpretar los caracteres de la primera cadena. En este caso, significa 2 caracteres (%2c
), 3 caracteres, 3 caracteres, 4 caracteres.Normalmente, la
sscanf
función también incluiría variables para capturar los datos extraídos. Si no, los datos se devuelven en una matriz que he llamado$parts
.La
print
declaración genera la cadena interpolada.$part[0]
se ignora.He utilizado una función similar para formatear números de teléfono australianos.
Tenga en cuenta que desde la perspectiva de almacenar el número de teléfono:
fuente
Formatos de teléfono del Reino Unido
Para la aplicación que desarrollé, descubrí que las personas ingresaban su número de teléfono "correctamente" desde un formulario legible por humanos, pero insertaban varios caracteres aleatorios como "-" / "+44", etc. El problema era que la aplicación en la nube que necesitaba hablar con un formato bastante específico. En lugar de usar una expresión regular (puede ser frustrante para el usuario), creé una clase de objeto que procesa el número ingresado en el formato correcto antes de ser procesado por el módulo de persistencia.
El formato de la salida asegura que cualquier software receptor interprete la salida como texto en lugar de un entero (que luego perdería inmediatamente el cero inicial) y el formato es consistente con British Telecoms. directrices sobre el formato de números, que también ayuda a la memorización humana al dividir un número largo en grupos pequeños y fáciles de memorizar.
+441234567890 produce (01234) 567 890
02012345678 produce (020) 1234 5678
1923123456 produce (01923) 123456
01923123456 produce (01923) 123456
01923 hola este es texto123456 produce (01923) 123456
La importancia del segmento de intercambio del número, entre paréntesis, es que en el Reino Unido y la mayoría de los demás países, las llamadas entre números del mismo intercambio se pueden realizar omitiendo el segmento de intercambio. Sin embargo, esto no se aplica a los números de teléfono de las series 07, 08 y 09.
Estoy seguro de que existen soluciones más eficientes, pero esta ha demostrado ser extremadamente confiable. Se pueden acomodar más formatos fácilmente agregando a la función teleNum al final.
El procedimiento se invoca desde el script de llamada, por lo que
'
fuente
Esto es para teléfonos fijos del Reino Unido sin el código de país
Resultado:
fuente
Por favor, eche un vistazo a la función basada en substr que puede cambiar formatos
fuente
Verifique el número de teléfono
fuente