2010-01-25 6 views
1

Il doit y avoir un moyen plus facile de le faire.importer des numéros de téléphone à partir d'une chaîne dans vb.net

J'essaye d'établir une fonction pour une classe de numéro de téléphone appelée "numéro de téléphone d'importation". Il devrait prendre n'importe quelle chaîne avec 10 chiffres quelque part (et permettre une extension), et les importer dans ses propres propriétés: AreaCode, Prefix, Suffix, et Extension (aaa-ppp-ssss-xxxx ...).

Je vérifie l'entrée avec une regex pour m'assurer qu'elle est valide, maintenant je veux marquer ces morceaux dans leurs propriétés respectives. Ce que j'ai ressemble à ceci (incomplet):

Public Sub ImportPhoneNumber(ByVal anyNumber As String) 
    'phone number is 10-digits long, e.g.: 012-345-6789 
    Dim reg_exp_10 As New Regex("^((\D*)\d(\D*)){9}((\D*)\d){1}(((x|ext){1}(\d)+)?|\D*)$", RegexOptions.IgnoreCase) 

    If reg_exp_10.IsMatch(anyNumber) Then 
     Dim areacode As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim prefix As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim suffix As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim loadExtension As Boolean = False 
     Dim count As Integer = 0 
     'for each char in anynumber, is it a number? concatenate it onto holder number 
     For Each i As Char In anyNumber 
      'first 3 hits, load areacode 
      If count < 3 Then 
       If Char.IsDigit(i) Then 
        areacode = String.Concat(areacode, i) 
        count = count + 1 
       End If 
      End If 
      'second 3 hits, load prefix 
      If count >= 3 AndAlso count < 6 Then 
       If Char.IsDigit(i) Then 
        prefix = String.Concat(prefix, i) 
        count = count + 1 
       End If 
      End If 
      'third 4 hits, load suffix 
      If count >= 6 AndAlso count < 10 Then 
       If Char.IsDigit(i) Then 
        suffix = String.Concat(suffix, i) 
        count = count + 1 
       End If 
      End If 

      If count >= 10 Then 
       If i.ToString = "x" Then 
        loadExtension = True 
       ElseIf i.ToString = "e" Then 

       End If 
      End If 

     Next 
    Else 
     Throw New Exception(ErrorMessages.PhoneNumber.INVALID_NUMBER) 
    End If 

End Sub 

des idées?

+0

Uuuh ... pourquoi n'utilisez-vous pas aussi votre expression rationnelle pour l'analyse syntaxique? –

+0

réponse courte: Je ne sais pas comment, je ne savais pas que je pouvais :) – Watki02

+1

Quoi que vous fassiez, ne l'implémentez pas en tant que validateur sur une page web, au mieux c'est ennuyeux quand vous devez "maquiller" un numéro de téléphone ou code postal parce que votre vrai n'est pas américain, au pire vous chasser les utilisateurs légitimes. – Zano

Répondre

1

Ici, nous aller:

/(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)/ 

Indicatif régional, Prefix, Suffixe, extension des groupes de capture 1 à 4 respectivement.

+0

Cela m'a seulement permis de démarrer dans la bonne direction, mais j'ai compris comment utiliser le contenu regex de Dot net. J'ignorais les mots clés "groupe de capture". – Watki02

Questions connexes