문자열에서 숫자 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
'programing' 카테고리의 다른 글
| ITunes 리뷰 URL 및 iOS 7(사용자에게 앱 평가 요청) AppStore에 빈 페이지 표시 (0) | 2023.05.29 |
|---|---|
| 여러 속성을 가진 CSS 전환 속기? (0) | 2023.05.29 |
| Postgre의 현재 연결 수를 가져오는 오른쪽 쿼리SQL DB (0) | 2023.05.29 |
| 기록이 있는 SVN 저장소를 새 Git 저장소로 마이그레이션하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
| 원에 불과한 사용자 정의 UI뷰 그리는 방법 - 아이폰 앱 (0) | 2023.05.29 |