12
votes

Expression régulière pour trouver des numéros de téléphone

Duplicates possibles:

une regex complète pour la validation de numéro de téléphone
Grep avec regex pour le numéro de téléphone

Bonjour tout le monde,

Je suis nouveau à Stackoverflow et j'ai une question rapide. Supposons que nous avons reçu un grand nombre de fichiers HTML (grand comme dans théoritude infini). Comment puis-je utiliser des expressions régulières pour extraire la liste des numéros de téléphone de tous ces fichiers?

Explication / expression sera vraiment appréciée. Les numéros de téléphone peuvent être l'un des formats suivants:

  • (123) 456 7899
  • (123) .456.7899
  • (123) -456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

    Merci beaucoup pour toute votre aide et en avez une bonne!


5 commentaires

Peut-il y avoir une autre chaîne de chiffres dans le code qui n'est pas un numéro de téléphone mais dites une chaîne de 11 chiffres?


Ne pense pas que c'est un dup mais assez proche.


Qu'en est-il des extensions de téléphone? ###-###-#### X####


Qu'en est-il des chiffres non américains, voire: + 1-xxx-xxx-xxxx ou 001-xxx-xxx-xxxx?


Qu'est-ce que c'est avec des numéros de téléphone correspondants avec des expressions régulières? Toutes les vingt minutes, quelqu'un demande une certaine variation de cette question


4 Réponses :


8
votes

/ ^ [\ .-) (] * ([0-9] {3}) [\ .-) (] * ([0-9] {3}) [\ .-) ( ] * ([0-9] {4}) $ /

devrait accomplir ce que vous essayez de faire.

La première partie ^ signifie le "début de la ligne" qui le forcera à rendre compte de la chaîne entière.

Le [\ .-) (] * que j'ai, il veut dire "toute période, un trait d'union, une parenthèse ou un espace apparaissant 0 ou plus".

Le ([0-9] {3}) Les clusters correspondent à un groupe de 3 numéros (le dernier est défini sur 4)

espère que cela aide!


8 commentaires

. * est assez lourd. Vous allez probablement récupérer beaucoup de faux positifs.


Pas à moins que quelqu'un jette des chiffres supplémentaires.


@Web Qu'en est-il de la phrase "Je voulais 100 cases, mais le gars m'a donné 200 à la place et je devais payer 1000 $ pour eux!" De plus, car il s'agit de HTML, vous pouvez obtenir des trucs comme


@Michael Mroezzek - OK, je l'ai réparé pour être plus précis


@WebDestroya: Merci pour la réponse, mais ne pensez-vous pas que cette mise en œuvre entraînera également la mauvaise syntaxe suivante :) 123).) 456) .9999?


@Rocky - Je suppose que vous devrez l'adapter à quelles conditions vous attendez, mais oui, cela fonctionnerait à ce sujet.


@WebDestroya: parfait! Merci.


Actuellement, la réponse est défectueuse. Regex traite les caractères non évalués par comme gammes et lancers Plage non valide dans la classe de caractères erreur.



1
votes

Cela vous aidera à attraper ceux avec un code régional entre parenthèses xxx

les autres sont les suivants: xxx

J'ai séparé le premier un et le second parce que les mettre ensemble sans retour en arrière pourrait vous engager d'accepter (123 456 7890 ou 123) 456 7890

Notez aussi que sur Mon terminal utilisant grep , je devais échapper au {} pour la répétition. Vous ne pouvez pas avoir à ne pas avoir à vous échapper, ou vous devrez peut-être échapper à d'autres personnages en fonction de l'endroit où vous avez l'intention d'utiliser cela.


0 commentaires

1
votes

^ (\ (? \ d {3} \)?) ([.-]) (\ D {3}) ([.-]) (\ d {4}) $

Cela devrait correspondre à tous sauf le dernier modèle. Pour le dernier, vous pouvez utiliser un motif séparé ^ \ d {10} $

Et il y a une erreur, il correspondra à (123 456 7899

  1. ^ (\ (\ \ d {3} \)?) , si nous cassons ce code, le premier caractère ( ^ ) correspond au début. du texte. \ (? et \ \)? acceptera ou non ce caractère, il y a le problème à faire de cela que vous devez vérifier s'il y avait un caractère d'ouverture, s'il y avait le Deuxièmement, je ne sais pas si cela est possible avec regex uniquement. Et \ d {3} correspondra à trois numéros

  2. ([.-]) correspondra à ceux de ceux-ci, mais une seule et unique une fois.

  3. (\ d {3}) correspondra à trois numéros

  4. même que 2

  5. (\ d {4}) $ Quatre numéros suivis de la fin du texte ( $ )

    Depuis que vous souhaitez extraire d'une page HTML, vous devez ignorer ^ et $ pour correspondre à n'importe quelle partie du texte et définir un drapeau global < / code>, dans javascript / exp / g

    Vous pouvez Test Regex ici


0 commentaires

4
votes

Sans savoir quelle langue que vous utilisez, je suis incertain que la syntaxe est correcte ou non.

Ceci devrait correspondre à tous vos groupes avec très peu de faux positifs: P>

/\(([0-9]{3})\)([ .-]?)([0-9]{3})\2([0-9]{4})|([0-9]{3})([ .-]?)([0-9]{3})\5([0-9]{4})/


1 commentaires

Merci à tous pour la réponse et désolé pour la gêne occasionnée par la répétition de cette question déjà existante qui aurait pu vous causer.