programing

문자열에서 숫자 0-9만 반환

easyjava 2023. 5. 29. 21:53
반응형

문자열에서 숫자 0-9만 반환

문자열에 있는 숫자만 반환하는 VBScript 및 .NET에서 사용할 수 있는 정규식이 필요합니다.

예를 들어 다음 "문자열"은 1231231234만 반환해야 합니다.

  • 123 123 1234
  • (123) 123-1234
  • 123-123-1234
  • (123)123-1234
  • 123.123.1234
  • 123 123 1234
  • 1 2 3 1 2 3 1 2 3 4

이 정보는 전자 메일 분석기에서 고객이 전자 메일에 제공할 수 있는 전화 번호를 찾고 데이터베이스 검색을 수행하는 데 사용됩니다.

비슷한 정규식을 놓쳤을 수도 있지만 regexlib.com 에서 검색했습니다.

[EDIT] - musicfreak의 응답 설정 후 RegexBuddy에서 생성한 코드 추가

VBScript 코드

Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "[^\d]"
ResultString = myRegExp.Replace(SubjectString, "")

VB.NET

Dim ResultString As String
Try
      Dim RegexObj As New Regex("[^\d]")
      ResultString = RegexObj.Replace(SubjectString, "")
Catch ex As ArgumentException
      'Syntax error in the regular expression
End Try

C#

string resultString = null;
try {
    Regex regexObj = new Regex(@"[^\d]");
    resultString = regexObj.Replace(subjectString, "");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

.NET에서는 문자열에서 숫자만 추출할 수 있습니다.다음과 같은 Linkq 사용:

string justNumbers = new String(text.Where(Char.IsDigit).ToArray());

다음을 포함하는 것을 잊지 마십시오.using System.Linq

메인에 대한 대안으로.Net유사한 질문의 답변에서 채택된 솔루션:

string justNumbers = string.Concat(text.Where(char.IsDigit));

VBScript에 일종의 "정규식 바꾸기" 기능이 있는지는 모르겠지만, 만약 있다면, 당신은 다음 유사 코드와 같은 것을 할 수 있습니다.

reg_replace(/\D+/g, '', your_string)

나는 VBScript를 모르기 때문에 정확한 코드를 알려줄 수 없지만 이것은 숫자가 아닌 모든 것을 제거할 것입니다.

편집: 전역 플래그(regexp 끝에 있는 "g")가 있어야 합니다. 그렇지 않으면 문자열의 첫 번째 숫자와 일치하지 않습니다.

참고: 여기서는 문제의 절반만 해결했습니다.

"야생에서" 입력된 미국 전화 번호의 경우 다음을 가질 수 있습니다.

  • 접두사 "1"이 있거나 없는 전화 번호
  • 지역 번호 포함 또는 없음 전화 번호
  • 내선 번호가 있는 전화 번호(모든 숫자 이외의 숫자를 맹목적으로 제거하면 "x" 또는 "내선" 또는 라인에 있는 모든 항목을 놓치게 됩니다.)
  • 니모닉 문자로 인코딩된 숫자(800-BUY-THIS 등)일 수 있습니다.

결과 숫자 목록을 데이터베이스에서 실제로 검색하는 단일 표준에 맞게 하려면 코드에 스마트를 추가해야 합니다.

이 문제를 해결하기 위해 수행할 수 있는 몇 가지 간단한 작업:

  • RegEx에서 숫자가 아닌 항목을 제거하기 전에 문자열에 "x"가 있는지 확인합니다.만약 있다면, 그 후에 모든 것을 잘라내세요 (대부분의 내선 번호 쓰기 버전을 처리할 것입니다).

  • 숫자가 "1"로 시작하는 10자리 이상인 경우 1을 잘라냅니다.지역 번호의 일부가 아닙니다. 미국 지역 번호는 2xx 범위에서 시작합니다.

  • 여전히 10자리를 초과하는 숫자의 경우, 나머지가 어떤 종류의 확장이라고 가정하고 잘라냅니다.

  • "end-with" 패턴 검색을 사용하여 데이터베이스 검색을 수행합니까(내 테이블에서 * 전화 번호가 'blah%'인 경우 선택).이렇게 하면 지역 코드가 제공되지 않지만 데이터베이스에 지역 코드 번호가 있는 상황(오류 가능성이 있음)을 처리합니다.

보아하니 당신은 10자리 전화번호를 알아내려고 하는 것 같군요.

다음 문자를 제거하려면 먼저 문자열을 대체하십시오.

<SPACE> , . ( ) - [ ] 

그런 다음 정규식 검색을 통해 10자리 숫자를 검색할 수 있습니다.

\d{10}

정규식이 없는 가장 간단한 솔루션:

public string DigitsOnly(string s)
   {
     string res = "";
     for (int i = 0; i < s.Length; i++)
     {
       if (Char.IsDigit(s[i]))
        res += s[i];
     }
     return res;
   }

regexlib의 phone nr 카테고리를 살펴봤습니까?꽤 많은 사람들이 당신이 필요로 하는 것을 하는 것 같습니다.

리처드 탤런트의 지적 사항과 관련하여, 이 코드는 내선 번호 및 부가 중인 미국 국가 코드(+1)와 관련된 대부분의 문제를 처리합니다.

가장 우아한 해결책은 아니지만, 저는 문제를 빨리 해결해야만 제가 하고 있는 일을 계속할 수 있었습니다.

누군가에게 도움이 되길 바랍니다.

 Public Shared Function JustNumbers(inputString As String) As String
        Dim outString As String = ""
        Dim nEnds As Integer = -1

        ' Cycle through and test the ASCII character code of each character in the string. Remove everything non-numeric except "x" (in the event an extension is in the string as follows):
        '    331-123-3451 extension 405  becomes 3311233451x405
        '    226-123-4567 ext 405        becomes 2261234567x405
        '    226-123-4567 x 405          becomes 2261234567x405
        For l = 1 To inputString.Length
            Dim tmp As String = Mid(inputString, l, 1)
            If (Asc(tmp) >= 48 And Asc(tmp) <= 57) Then
                outString &= tmp
            ElseIf Asc(tmp.ToLower) = 120
                outString &= tmp
                nEnds = l
            End If
        Next


        ' Remove the leading US country code 1 after doing some validation
        If outString.Length > 0 Then
            If Strings.Left(outString, 1) = "1" Then

                ' If the nEnds flag is still -1, that means no extension was added above, set it to the full length of the string
                ' otherwise, an extension number was detected, and that should be the nEnds (number ends) position.
                If nEnds = -1 Then nEnds = outString.Length

                ' We hit a 10+ digit phone number, this means an area code is prefixed; 
                ' Remove the trailing 1 in case someone put in the US country code
                ' This is technically safe, since there are no US area codes that start with a 1. The start digits are 2-9
                If nEnds > 10 Then
                    outString = Right(outString, outString.Length - 1)
                End If
            End If
        End If

        Debug.Print(inputString + "          : became : " + outString)

        Return outString
    End Function

언급URL : https://stackoverflow.com/questions/844461/return-only-digits-0-9-from-a-string

반응형