2010-01-25 2 views
1

쉬운 방법이 있어야합니다.vb.net의 문자열에서 전화 번호를 가져 오십시오.

"전화 번호 가져 오기"라는 전화 번호 클래스에 대한 기능을 wirte하려고합니다. 어딘가에 10 자리 숫자가있는 임의의 문자열을 가져 와서 확장자를 허용해야하며, 그것들을 고유 한 속성 인 AreaCode, Prefix, Suffix 및 Extension (aaa-ppp-ssss-xxxx ...)으로 가져와야합니다.

정규식으로 입력을 검사하여 유효한지 확인합니다. 이제 해당 부분을 해당 속성으로 토큰 화합니다. 내가 본 것 (불완전한 것) :

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 

아이디어가 있습니까?

+0

Uuuh ... 왜 구문 분석을 위해 정규식을 사용하지 않으시겠습니까? –

+0

짧은 답변 : 어떻게 할 수 있는지 모르겠다. :) – Watki02

+1

무엇을 하든지 웹 페이지에서 유효성 검사기로 구현하지 말고 기껏해야 "보충"해야합니다. 진짜 전화 번호가 미국인이 아니기 때문에 전화 번호 나 우편 번호를 입력해야합니다. 최악의 경우 합법적 인 사용자를 멀리하게됩니다. – Zano

답변

1

여기에 우리가 간다 : 캡처 그룹

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

지역 코드, 접두사, 접미사, 확장 1 ~ 4 각각.

+0

이것은 올바른 방향으로 만 시작되었지만 Dot net regex를 사용하는 방법을 알아 냈습니다. 나는 "그룹 잡기"라는 핵심 단어를 모르고있었습니다. – Watki02

관련 문제