Numéro de téléphone Données dans divers formats (j'ai choisi, car les données entrantes sont peu fiables et non dans les formats attendus): mon code rubis pour extraire tous les chiffres, supprimer Tout leader 1 pour le code de pays des États-Unis, utilisez ensuite les 10 premiers chiffres pour créer le "nouveau" numéro de téléphone dans un format souhaité: p> Les résultats sont
4 Réponses :
Pour les chiffres dans le plan nord-américain, on pourrait extraire le premier numéro en utilisant par exemple: p> comme avec le code de départ, cela ne capture pas plusieurs numéros, par exemple "(513) 287-7000, Sans frais (800) 733-2077 " P> FWIW, j'ai trouvé qu'il est plus facile à long terme de capturer et de stocker des numéros complets, c'est-à-dire, y compris le code de pays et aucun séparateur; faire des suppositions lors de la capture sur laquelle plan de numérotation manquant un préfixe est dans et sélectionnant les formats, par exemple , Nanp v. De, lors du rendu. P> p> phon_number_string.gsub (/ \ d /, '') .match (/ ^ 1? (\ d {10}) /) [1 ] code>
Voici une approche beaucoup plus simple en utilisant uniquement des regextes et de la substitution: cette bandes Toutes les non-chiffres ( Voici le test: p> \ d code>), saute une option leader (< Code> ^ 1? code>), extrait ensuite les premiers 10 chiffres restants en morceaux (
(\ d {3}) (\ d {3}) (\ d {4}) code>) et formats. P>
Cette approche est probablement plus rapide.
Mon approche est un peu différent (et je pense mieux IMHO :-): Je ne devais manquer de numéros de téléphone, même s'il y avait 2 sur une ligne. Je ne voulais pas non plus avoir des lignes qui avaient 3 séries de chiffres éloignées (voir l'exemple des cookies), et je ne voulais pas confondre une adresse IP comme numéro de téléphone.
code pour autoriser plusieurs numéros par ligne, mais nécessitent également des ensembles de chiffres pour être "fermer" l'un à l'autre: p> et voici les tests (avec quelques tests supplémentaires) p> < Pré> xxx pré> Une autre implémentation: en utilisant "Numérisation", il appliquera automatiquement l'expression régulière plusieurs fois, ce qui est bon si vous souhaitez plus de 1 numéro de téléphone par ligne. Si vous voulez simplement obtenir le premier numéro de téléphone sur une ligne, vous pouvez également utiliser: p> (juste une manière différente de faire des choses, en utilisant la fonction "Match" de REGEXP) P> P>
C'est un vieux fil, bien que je pensais que je partageais une solution. Le bloc de sauvetage protège des méthodes de modification appelées sur Utilisation des tests postés ci-dessus. p> Supprimer! code> supprime tous les caractères non numériques. P> < p>
gsub! code> correspond aux chiffres, puis les modèle dans une chaîne séparée d'un trait d'union. p>
[0..11] code> tranches de chiffres recherchés (au cas échéant des extensions) p>
nil code> p>