VBScriptと.NETで使用できる正規表現が必要です。これは、文字列で見つかった数字のみを返します。
たとえば、次の「文字列」はいずれも1231231234のみを返す必要があります
これは、顧客が電子メールで提供し、データベース検索を行う可能性のある電話番号を見つけるために、電子メールパーサーで使用されます。
同様の正規表現を見逃したかもしれませんが、regexlib.comで検索しました。
[編集]-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
}
VBScriptにある種の「正規表現の置換」機能があるかどうかはわかりませんが、ある場合は、この擬似コードのようなことができます。
reg_replace(/\D+/g, '', your_string)
私はVBScriptを知らないので、正確なコードを提供することはできませんが、これは数字以外のものを削除します。
編集:グローバルフラグ(正規表現の最後に「g」)があることを確認してください。そうでない場合は、文字列の最初の非数字にのみ一致します。
.NETでは、文字列から数字だけを抽出できます。このような:
string justNumbers = new String(text.Where(Char.IsDigit).ToArray());
メインの.Net
ソリューションに代わるものとして、 類似した質問 回答から適応しました:
string justNumbers = string.Concat(text.Where(char.IsDigit));
注:ここでは問題の半分しか解決していません。
「インザワイルド」と入力された米国の電話番号の場合、次のようになります。
データベースに実際に検索する単一の標準に結果の数字リストを適合させるために、コードにスマートを追加する必要があります。
これを修正するためにできる簡単なこと:
RegExで数字以外を削除する前に、文字列に「x」があるかどうかを確認してください。ある場合は、その後すべてを切り取ります(内線番号を記述するほとんどのバージョンを処理します)。
「1」で始まる10桁以上の数字の場合、1を切り取ります。市外局番の一部ではなく、米国の市外局番は2xxの範囲で始まります。
まだ10桁を超える数値については、残りが何らかの拡張であると想定し、切り捨てます。
「ends-with」パターン検索を使用してデータベース検索を実行します(SELECT * FROM mytable WHERE phonenumber LIKE 'blah%')。これにより、市外局番は提供されませんが、データベースに番号with市外局番が含まれる場所(エラーの可能性はあります)が処理されます。
物事の見た目では、10桁の電話番号をキャッチしようとしています。
テキストの文字列を最初に置き換えて、次の文字を削除しないでください。
<SPACE> , . ( ) - [ ]
その後、10桁の数字の正規表現検索を行うことができます。
\d{10}
Richardtallentが指摘した点に関して、このコードは内線番号に関するほとんどの問題を処理し、米国の国コード(+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
Regexlibで phone nr category を実行しましたか。かなりの数があなたが必要なことをするようです。