确定字符是否是VB6中的字母的最佳方法是什么?

时间:2008-09-18 14:35:51

标签: vb6

需要一个将字符作为参数的函数,如果它是一个字母,则返回true。

9 个答案:

答案 0 :(得分:10)

这是rpetrich针对question Joel Spolsky回复的代码的一部分。我觉得它需要一个特定于它解决的问题的帖子。真的很棒。

Private Function IsLetter(ByVal character As String) As Boolean
    IsLetter = UCase$(character) <> LCase$(character)
End Function

你可能在想,“这总能奏效吗?”有关UCase和LCase功能的文档证实它将:

  

UCase功能只有小写字母转换为大写;   所有大写字母和非字母字符保持不变

     

LCase功能只有大写字母转换为小写字母;   所有小写字母和非字母字符保持不变

答案 1 :(得分:4)

Seanyboy的IsCharAlphaA answer已接近尾声。最好的方法是使用W版本:

Private Declare Function IsCharAlphaW Lib "user32" (ByVal cChar As Integer) As Long
Public Property Get IsLetter(character As String) As Boolean
    IsLetter = IsCharAlphaW(AscW(character))
End Property

当然,这一切都很重要,因为所有VB6的控件都只有ANSI

答案 2 :(得分:2)

Private Function IsLetter(Char As String) As Boolean
    IsLetter = UCase(Char) Like "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
End Function

答案 3 :(得分:1)

以下是什么问题,它不依赖于模糊的语言行为?

Private Function IsLetter(ByVal ch As String) As Boolean
    IsLetter = (ch >= "A" and ch <= "Z") or (ch >= "a" and ch <= "z")
End Function

答案 4 :(得分:1)

我相信我们可以对此进行更多改进。 rpetrich 的代码可以运行,但也许只能靠运气。 API调用的参数应该是TCHAR(实际上是WCHAR)而不是Long。这也意味着没有摆弄转换为Long或使用&amp; HFFFF进行屏蔽。顺便说一下,这是Integer并在这里添加一个隐式转换为Long。也许他的意思是&amp; HFFFF&amp;在这种情况下?

最重要的是,最好为这个API调用明确地调用UnicoWS包装器,以获得Win9X兼容性。可能需要部署UnicoWS.dll,但至少我们获得了该选项。然后再次从VB6可以自动重定向,我没有安装Win9X来测试它。

Option Explicit

Private Declare Function IsCharAlphaW Lib "unicows" (ByVal WChar As Integer) As Long

Private Function IsLetter(Character As String) As Boolean
    IsLetter = IsCharAlphaW(AscW(Character))
End Function

Private Sub Main()
    MsgBox IsLetter("^")
    MsgBox IsLetter("A")
    MsgBox IsLetter(ChrW$(&H34F))
    MsgBox IsLetter(ChrW$(&HFEF0))
    MsgBox IsLetter(ChrW$(&HFEFC))
End Sub

答案 5 :(得分:0)

看了一下以下...... ...

Private Declare Function IsCharAlphaA Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long

我相信IsCharAlphaA测试ANSI字符集,而IsCharAlpha测试ASCII。我可能错了。

答案 6 :(得分:0)

Private Function IsAlpha(ByVal vChar As String) As Boolean
  Const letters$ = "abcdefghijklmnopqrstuvwxyz"

  If InStr(1, letters, LCase$(vChar)) > 0 Then IsAlpha = True
End Function

答案 7 :(得分:0)

我在VBA中使用它

Function IsLettersOnly(Value As String) As Boolean
   IsLettersOnly = Len(Value) > 0 And Not UCase(Value) Like "*[!A-Z]*"
End Function

答案 8 :(得分:-2)

它并不完全记录自己。而且可能很慢。这是一个聪明的黑客,但就是这样。在我的检查中,我很想明白。要么使用正则表达式,要么写一个更明显的测试。

public bool IsAlpha(String strToCheck)
{
    Regex objAlphaPattern=new Regex("[^a-zA-Z]");
    return !objAlphaPattern.IsMatch(strToCheck);
}

public bool IsCharAlpha(char chToCheck)
{
    return ((chToCheck=>'a') and (chToCheck<='z')) or ((chToCheck=>'A') and (chToCheck<='Z'))
}