需要一个将字符作为参数的函数,如果它是一个字母,则返回true。
答案 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'))
}