Je travaille sur une application SMS et je dois pouvoir convertir le numéro de téléphone de l'expéditeur de +11234567890 à 123-456-7890 afin qu'il puisse être comparé aux enregistrements dans une base de données MySQL .
Les numéros sont stockés dans ce dernier format pour une utilisation ailleurs sur le site et je préfère ne pas changer ce format car cela nécessiterait de modifier beaucoup de code.
Comment procéderais-je avec PHP?
Merci!
php
phone-number
NuitMICU
la source
la source
Réponses:
la source
sprintf
ou `printf``? Quelqu'un, s'il vous plaît, expliquez-moi. Je travaille uniquement avec des numéros de téléphone américains et je ne pense pas que les exécuter via une fonction de sortie utilisant une sous-chaîne soit la meilleure méthode.Il s'agit d'un formateur de téléphone américain qui fonctionne sur plus de versions de nombres que sur toutes les réponses actuelles.
Et voici une ventilation de l'expression régulière:
Mise à jour: 11 mars 2015 à utiliser à la
{0,7}
place de{,7}
la source
~.*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})(?:[ \D#\-]*(\d{3,6}))?.*~
.(\d{3}) // 3 digits
[\d]
// caractère qui n'est pas un chiffre{,7}
être mis à jour{0,7}
. J'ai mis à jour le code.Cette fonction formatera les numéros de téléphone internationaux (10+ chiffres), non internationaux (10 chiffres) ou old school (7 chiffres). Tous les nombres autres que 10+, 10 ou 7 chiffres resteront non formatés.
la source
En supposant que vos numéros de téléphone ont toujours ce format exact, vous pouvez utiliser cet extrait de code:
la source
Les numéros de téléphone sont difficiles. Pour une solution internationale plus robuste, je recommanderais ce port PHP bien entretenu de la bibliothèque libphonenumber de Google .
En l'utilisant comme ça,
vous obtiendrez la sortie suivante:
Je recommanderais d'utiliser le
E164
format pour les chèques en double. Vous pouvez également vérifier si le numéro est réellement un numéro mobile ou non (en utilisantPhoneNumberUtil::getNumberType()
), ou s'il s'agit même d'un numéro américain (en utilisantPhoneNumberUtil::getRegionCodeForNumber()
).En prime, la bibliothèque peut gérer à peu près n'importe quelle entrée. Si, par exemple, vous choisissez d'exécuter
1-800-JETBLUE
le code ci-dessus, vous obtiendrezNeato.
Cela fonctionne aussi bien pour les pays autres que les États-Unis. Utilisez simplement un autre code de pays ISO dans l'
parse()
argument.la source
number_formatted
colonne dans ma base de données et d'entrer manuellement les numéros formatés. Toujours utiliserlibphonenumber
localement pour générer les nombres formatés, mais inclure une bibliothèque aussi énorme pour mon petit projet est juste exagéré.Voici ma solution réservée aux États-Unis, avec l'indicatif régional en tant que composant facultatif, le délimiteur requis pour l'extension et les commentaires regex:
Et voici le script pour le tester:
la source
Voici une fonction simple pour formater des numéros de téléphone de 7 à 10 chiffres d'une manière plus européenne (ou suédoise?):
la source
Ne réinventez pas la roue! Importez cette incroyable bibliothèque:
https://github.com/giggsey/libphonenumber-for-php
Il est basé sur la bibliothèque de Google pour l'analyse, le formatage et la validation des numéros de téléphone internationaux: https://github.com/google/libphonenumber
la source
Je vois que cela est possible en utilisant soit une expression régulière, soit quelques appels de substr (en supposant que l'entrée est toujours de ce format, et ne change pas de longueur, etc.)
quelque chose comme
devrait le faire.
la source
C'est plus rapide que RegEx.
la source
Essayez quelque chose comme:
cela prendrait un nombre de $
8881112222
et serait converti en888-111-2222
. J'espère que cela t'aides.la source
'.'
doit également être mis à jour'-'
ou supprimé. Il a été inclus en raison du cas d'utilisation particulier rencontré - avec très peu d'effort, vous auriez pu le convertirpreg_replace('/\d{3}/', '$0-', substr($number, 2))
et répondre directement à la question.Une autre option - facilement mise à jour pour recevoir un format de la configuration.
la source
Tout,
Je pense que je l'ai réparé. Travailler pour les fichiers d'entrée actuels et avoir les 2 fonctions suivantes pour y parvenir!
function format_phone_number:
fonction validate_phone_number:
Remarquez que j'ai ceci dans une classe lib, donc l'appel "self :: validate_phone_number" de la première fonction / méthode.
Remarquez la ligne n ° 32 de la fonction "validate_phone_number" où j'ai ajouté:
pour me procurer le faux retour nécessaire si ce n'est pas un numéro de téléphone valide.
Encore faut-il tester cela avec plus de données, mais en travaillant sur les données actuelles, avec le format actuel et j'utilise le style '8' pour ce lot de données particulier.
J'ai également commenté la logique de "l'extension" car j'en recevais constamment des erreurs, car je n'ai aucune de ces informations dans mes données.
la source
cela prend 7, 10 et 11 chiffres, supprime les caractères supplémentaires et ajoute des tirets en allant de droite à gauche dans la chaîne. changez le tiret en espace ou en point.
la source
Je sais que l'OP demande un format 123-456-7890, mais, sur la base de la réponse de John Dul , je l'ai modifié pour renvoyer le numéro de téléphone au format parenthèses, par exemple (123) 456-7890. Celui-ci ne gère que les nombres à 7 et 10 chiffres.
la source
Voici ma prise:
La
sscanf
fonction prend comme second paramètre une chaîne de format lui indiquant comment interpréter les caractères de la première chaîne. Dans ce cas, cela signifie 2 caractères (%2c
), 3 caractères, 3 caractères, 4 caractères.Normalement, la
sscanf
fonction comprend également des variables pour capturer les données extraites. Sinon, les données sont renvoyées dans un tableau que j'ai appelé$parts
.L'
print
instruction génère la chaîne interpolée.$part[0]
est ignoré.J'ai utilisé une fonction similaire pour formater les numéros de téléphone australiens.
Notez que du point de vue du stockage du numéro de téléphone:
la source
Formats de téléphone au Royaume-Uni
Pour l'application que j'ai développée, j'ai constaté que les gens entraient leur numéro de téléphone `` correctement '' à partir d'une forme lisible par l'homme, mais inséraient divers caractères aléatoires tels que `` - '' / `` +44 '', etc. Le problème était que l'application cloud qui il fallait parler était assez précis sur le format. Plutôt que d'utiliser une expression régulière (cela peut être frustrant pour l'utilisateur), j'ai créé une classe d'objets qui traite le numéro entré dans le format correct avant d'être traité par le module de persistance.
Le format de la sortie garantit que tout logiciel de réception interprète la sortie comme du texte plutôt que comme un entier (qui perdrait alors immédiatement le zéro de début) et le format est cohérent avec British Telecoms des directives sur le formatage des nombres - ce qui facilite également la mémorisation humaine en divisant un long nombre en petits groupes faciles à mémoriser.
+441234567890 produit (01234) 567890
02012345678 produit (020) 1234 5678
1923123456 produit (01923) 123456
01923123456 produit (01923) 123456
01923 bonjour ceci est text123456 produit (01923) 123456
L'importance du segment d'échange du numéro - entre parenthèses - est qu'au Royaume-Uni, et dans la plupart des autres pays, les appels entre les numéros d'un même central peuvent être effectués en omettant le segment d'échange. Cela ne s'applique cependant pas aux numéros de téléphone des séries 07, 08 et 09.
Je suis sûr qu'il existe des solutions plus efficaces, mais celle-ci s'est avérée extrêmement fiable. Plus de formats peuvent facilement être adaptés en ajoutant à la fonction teleNum à la fin.
La procédure est appelée à partir du script appelant ainsi
»
la source
Ceci est pour les lignes fixes du Royaume-Uni sans le code de pays
Résultat:
la source
Veuillez jeter un œil à la fonction basée sur substr qui peut changer de format
la source
Vérifier le numéro de téléphone
la source