如何检查一个字符串是否只包含字母?

问题描述 投票:7回答:4

我正在使用一个函数,该函数允许我查看一串文本并评估它是否由字母组成。 它被安置在一个叫做 "General "的模块中。 General模块只用来存放公共函数和变量。 函数代码列在下面。

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsLetter = True
            Case Else
                IsLetter = False
                Exit For
        End Select
    Next
End Function  

接下来我有两个 "if "例程 用于评估用户表单中文本框的前两个字符 第一个例程询问第1个字符是否是数字,第二个例程询问第2个字符是否是字母。 目前,当IsAlpha测试为真时,第二个 "if "例程将我从子例程中弹出,而不是生成MsgBox。 IsAlpha函数没有被正确调用吗?

如果例程的代码在下面列出。

Private Sub CmdMap_Click()

    With TxtDxCode
        If IsNumeric(Left(Me.TxtDxCode.Text, 1)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If

        If IsAlpha(Left(Me.TxtDxCode.Text, 2)) Then
            MsgBox "Incorrect DX Code format was entered. ", vbExclamation, "DX Code Entry"
            TxtDxCode.Value = ""
            TxtDxCode.SetFocus
            Exit Sub
        End If
    End With
vba function excel-vba excel
4个回答
12
投票

为什么不使用正则表达式来代替?这样就不涉及循环了。

Public Function IsAlpha(strValue As String) As Boolean
    IsAlpha = strValue Like WorksheetFunction.Rept("[a-zA-Z]", Len(strValue))
End Function

另外,当你创建一个用户定义函数(UDF)时 你需要确保返回值被分配给实际函数的名称,在这种情况下: IsAlpha - 不 IsLetter 否则该值将永远不会被传回。


3
投票

试试这个 IsAlpha

Public Function IsAlpha(strValue As String) As Boolean
Dim intPos As Integer

    For intPos = 1 To Len(strValue)
        Select Case Asc(Mid(strValue, intPos, 1))
            Case 65 To 90, 97 To 122
                IsAlpha = True
            Case Else
                IsAlpha = False
                Exit For
        End Select
    Next
End Function

1
投票

检查一个字符串是否只包含alpha字符的最直接、最简洁、最有效的方法就是使用这个函数。

Function IsAlpha(s) As Boolean
    IsAlpha = Len(s) And Not s Like "*[!a-zA-Z]*"
End Function

0
投票

Left(Me.TxtDxCode.Text, 2) 返回字符串的前两个字符。所以,如果Me.TxtDxCode.Text是7ZABC,这个表达式将返回 "7Z"。这将导致 IsAlpha 测试失败。

因为你只想检查第2个字符,所以用Mid$代替。

If IsAlpha(Mid$(Me.TxtDxCode.Text, 2, 1)) Then

这将返回 "Z "和 IsAlpha 测试成功

(字符串版本Left$、Mid$等比变体版本Left、Mid等速度稍快--参见 此处)

© www.soinside.com 2019 - 2024. All rights reserved.