VB6 只比较字符串中的数字字符

VB6 comparing only numeric characters in srings

我需要在不使用 .Net 库的情况下,将 CSV 文件中的 phone 数字与 VB6 中 SSMS 数据库中的 phone 数字进行比较。一个的编号可能为 555-555-5555,另一个的编号可能与 (555) 555-5555 相同,这显然会在比较字符串时显示为不同。 我知道我可以使用 for 循环和缓冲区来仅提取数字字符,例如:

Public Function PhoneNumberNumeric(PhoneNumberCSV As String) As String
Dim CharNdx As Integer
Dim buffer As String
For CharNdx = 1 To Len(PhoneNumberCSV) Step 1
    If IsNumeric(Mid(PhoneNumberCSV, CharNdx, 1)) Then
        buffer = buffer + Mid(PhoneNumberCSV, CharNdx, 1)
    End If
Next
PhoneNumberNumeric = buffer
End Function

但这很贵。有更便宜的方法吗?

这应该会快一点:

Private Function Clean(ByRef Original As String) As String
    Dim I As Long
    Dim J As Long
    Dim Char As Long

    Clean = Space$(10)
    For I = 1 To Len(Original)
        Char = AscW(Mid$(Original, I, 1))
        If 48 <= Char And Char <= 57 Then
            J = J + 1
            If J > 10 Then Exit For 'Or raise an exception.
            Mid$(Clean, J, 1) = ChrW$(Char)
        End If
    Next
End Function

它避免了字符串连接、ANSI 转换和 VBScript 形式 "pigeon VB"(使用缓慢的 Variant 函数)。