2010-02-23 4 views
2

Je souhaite extraire des numéros mobiles valides (sur la base du format) à partir d'un texte.Comment reconnaître un numéro de téléphone mobile dans un texte donné?

par exemple. I/O texte (987) 456 7890, (987) -456 à 7890 à nouveau un texte

O/P 9874567890 9874567890

problème est, il existe de nombreux formats mobiles valables dans tous les coins comme monde.

text = "Denmark 11 11 11 11, 1111 1111 " 
     // + "Germany 03333 123456, +49 (3333) 123456 " 
     // + "Netherlands + 31 44 12345678 Russia +7(555)123-123 " 
     // + "spain 12-123-12-12 switzerland +41 11 222 22 22 " 
     // + "Uk (01222) 333333 India +91-12345-12345 " 
     // + "Austrailia (04) 1231 1231 USA (011) 154-123-4567 " 
     // + "China 1234 5678 France 01-23-45-67-89 " 
     // + "Poland (12) 345 67 89 Singapore 123 4567 " 
     // + "Thailand (01) 234-5678, (012) 34-5678 " 
     // + "United Kingdom," 
     // + "United States (987) 456 7890, (987)-456-7890+ etc." 
  1. Comment couvrir tous les formats mobiles?
  2. Longueur minimale et maximale des numéros de mobile (avec ou sans code de pays)? Comment reconnaître que le numéro de mobile a le code du pays ou pas?

Répondre

1

Vous pouvez vérifier si cela correspond à vos besoins: A comprehensive regex for phone number validation

+1

Il n'y a pas de fonctionnalités intégrées pour traiter des expressions régulières dans Blackberry. –

+0

mon problème n'est toujours pas résolu complètement parce que le format mobile a beaucoup de variations et un sujet similaire est également bien discuté. donc je vais accepter votre réponse. – Vivart

1

Par expérience, je sais comment cela fonctionne dans mon système d'exploitation de téléphone. Il regarde une séquence de chiffres assez longue, séparés par un jeu de caractères autorisés.

En principe quelque chose comme:

[\+]?([0-9]|[\(\).- ]){min,max} 

Ce regex est suboptimale car il semble aussi pour de longues séquences de caractères de séparation. Vous devrez probablement également filtrer ces résultats.

Une méthode très simple avec quelques faux positifs, mais les faux positifs sont meilleurs que les échecs.

1

Vous ne devriez pas utiliser la liste d'échantillons que vous avez comme guide pour les numéros de téléphone mobiles réels. Par exemple, la séquence numérique indiquée pour les Pays-Bas est incorrecte, car elle ne couvre pas uniquement les numéros mobiles mais TOUS les numéros de téléphone réguliers (elle ne couvre pas les numéros 0800 et 0900 pour lesquels des règles différentes s'appliquent). un élément même pour cela. Je ne peux que supposer que la liste est également incorrecte pour les autres pays (et bien sûr, elle est loin d'être complète, car elle ne couvre pas tous les pays, mais peut-être que vous n'avez posté qu'un fragment). Pour analyser un numéro de téléphone, vous devez d'abord supprimer tous les espaces blancs et autres caractères de mise en forme de ce qui pourrait être un numéro de téléphone, puis vérifiez s'il a la bonne longueur, puis essayez d'en déduire s'il inclut un code de pays ou non. S'il inclut un code de pays mais ne commence pas par 00 ou + (les deux sont utilisés pour indiquer un numéro international), il se peut que ce ne soit pas un numéro de téléphone après tout. Inclut-il un indicatif régional? Si oui, l'indicatif régional est-il associé aux téléphones mobiles (par exemple, aux Pays-Bas, tous les numéros de téléphone mobile portent l'indicatif 06, MAIS ce n'était pas toujours le cas, donc si vous avez un vieux document, un indicatif régional 06 Après avoir déduit cela (et les numéros de téléphone mobile AFAIK comprennent toujours un indicatif régional), vous devez vérifier si les numéros restants constituent quelque chose qui pourrait être un numéro de téléphone réel sans indicatif régional en fonction de la longueur du nombre (indice: le code régional + numéro ensemble doit être 10 long ici, et je pense partout)

Et tout cela en tenant compte du fait que les règles peuvent bien être différentes pour différents pays ou même différents réseaux au sein de quelques pays.

Et bien sûr, si vous trouvez un numéro qui ressemble à un numéro de téléphone valide, il peut ne pas l'être. Il pourrait s'agir d'un autre numéro qui ressemble à un numéro de téléphone mais qui ne l'est pas.

+0

Sa liste est erronée pour la Suisse aussi. À mon avis, la détection fiable des numéros de téléphone est assez difficile. Détecter le code du pays aussi. La détection des numéros mobiles, lorsque les préfixes sont susceptibles de changer à tout moment, semble assez impossible - ou fragile au mieux. – Benjol

+0

à travers cette liste je voulais juste donner un indice que ce que je veux. Au lieu d'écrire du texte de poubelle j'ai donné le nom du pays. – Vivart

1

La recherche simple de tous les formats de chaîne correspondants dans ce cas n'est pas correcte. La manière optimale consiste à utiliser des expressions régulières pour trouver toutes les correspondances de numéros de téléphone, mais Blackberry Java ne dispose pas de fonctionnalités intégrées pour traiter les expressions régulières. Mais vous pouvez utiliser la bibliothèque tierce pour l'implémentation J2ME du traitement RegEx, c'est-à-dire smth. comme this.

+0

merci yeti vous avez résolu mon autre problème.J'étais aussi à la recherche de 3rd party RegEx lib. – Vivart

0

// Regex - Vérifiez Singapour numéros de téléphone mobile valides

public static boolean isSingaporeMobileNo(String str) { 
     Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$"); 
     Matcher matcher = mobNO.matcher(str); 
     if (matcher.find()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+0

Malheureusement, ces classes ne sont pas disponibles dans BlackBerry Java. –

Questions connexes