确保字符串正好是一个5位数字

时间:2010-11-19 19:20:43

标签: vba

如果某些字符串='XXXXX'

,我想返回true

每个X都是数字0到9

我知道必须有十几种方法可以做到这一点,但我想知道最好的方法。

4 个答案:

答案 0 :(得分:4)

yourString Like "#####"

答案 1 :(得分:2)

如果你想要最简单的方法,你可以这样做:

Function MyFunction(myString As String) As Boolean
    MyFunction = ((Len(myString) = 5) And (IsNumeric(myString)))
End Function

如果你想要更有效的方式,你必须为人们建议的不同方法运行一些测试。

编辑:之前的解决方案不能很好地工作(请参阅前两条评论),但我已将其放在那里,因为它已被接受。这就是我要做的事情:

Function MyFunction(myString As String) As Boolean
    Dim myDouble As Double
    Dim myLong As Long
    myDouble = Val(myString)
    myLong = Int(myDouble / 10000)
    MyFunction = ((Len(myString) = 5) And (myLong > 0) And (myLong < 10))
End Function

该功能中没有错误“保护”,因此如果您尝试检查像22222222222222这样的太大的数字,它将无效。

答案 2 :(得分:1)

之前提出的类似问题:link text

基本上想检查

(Len(s) = 5) And IsNumeric(s)

答案 3 :(得分:1)

您还可以使用正则表达式来解决此问题。如果在VBA项目中包含Microsoft VBScript Regular Expressions 5.5,则可以使用RegExpMatchCollection变量,如下面的函数所示。 (这是对ozgrid.com this post的响应的修改。)

Public Function FiveDigitString(strData As String) As Boolean

On Error GoTo HandleError

Dim RE As New RegExp
Dim REMatches As MatchCollection

    With RE
        .MultiLine = False
        .Global = False
        .IgnoreCase = True
        .Pattern = "^[0-9][0-9][0-9][0-9][0-9]$"
    End With

    Set REMatches = RE.Execute(strData)
    If REMatches.Count = 1 Then
        FiveDigitString = True
    Else
        FiveDigitString = False
    End If

    Exit Function
HandleError:
    Debug.Print "Error in FiveDigitString: " & Err.Description
    FiveDigitString = False
End Function