需要一個將字符作爲參數的函數,如果它是字母則返回true。確定字符是否是VB6中的一個字母的最佳方法是什麼?
回答
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只有
這是rpetrich發佈的代碼的一部分,以響應question由Joel Spolsky發佈。我覺得它需要一個特定於它解決的問題的帖子。它真的很棒。
Private Function IsLetter(ByVal character As String) As Boolean
IsLetter = UCase$(character) <> LCase$(character)
End Function
你可能在想,「這會一直工作嗎?」在用Ucase和LCASE函數的文檔,證實將:
UCASE函數只有小寫字母被轉換爲大寫; 所有大寫字母和非字母字符保持不變。
LCase功能只有大寫字母被轉換爲小寫字母; 所有小寫字母和非字母字符保持不變。
以下哪種錯誤不依賴於模糊的語言行爲?
Private Function IsLetter(ByVal ch As String) As Boolean
IsLetter = (ch >= "A" and ch <= "Z") or (ch >= "a" and ch <= "z")
End Function
它只適用於英文字母;它不適用於帶重音符號的字母。 – 2008-09-18 14:43:54
快照。我們寫了幾乎相同的代碼。 雖然 - 關於ANSI字符集的好點。 – seanyboy 2008-09-18 14:46:10
它並不完全記錄自身。它可能會很慢。這是一個聰明的黑客,但就是這樣。在我的檢查中我會更加明顯。要麼使用正則表達式,要麼寫一個更明顯的測試。
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'))
}
是不是C#?標題爲VB6的問題有點偏離主題? – MarkJ 2009-05-11 09:42:55
環顧了一下想出了下面......
Private Declare Function IsCharAlphaA Lib "user32" Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
我相信IsCharAlphaA測試ANSI字符集和IsCharAlpha測試ASCII。我可能是錯的。
與大多數Windows函數一樣... IsCharAlphaA是ANSI版本 IsCharAlphaW是Unicode版本 IsCharAlpha是一個宏,它的行爲取決於是否定義了UNICODE – 2008-09-18 20:24:46
Private Function IsAlpha(ByVal vChar As String) As Boolean
Const letters$ = "abcdefghijklmnopqrstuvwxyz"
If InStr(1, letters, LCase$(vChar)) > 0 Then IsAlpha = True
End Function
Private Function IsLetter(Char As String) As Boolean
IsLetter = UCase(Char) Like "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]"
End Function
我相信我們能在這多一點的改善。 rpetrich的代碼可以工作,但也許只能靠運氣。 API調用的參數應該是TCHAR(實際上是WCHAR),而不是Long。這也意味着沒有與轉換爲Long或掩蓋與012FFHFFFF擺弄。順便提一句,這是Integer,並且在這裏也向Long添加了一個隱式轉換。也許他的意思是& HFFFF &在這種情況下?
最重要的是,爲了Win9X的兼容性,最好明確地調用UnicoWS包裝來調用此API。 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
我在VBA
Function IsLettersOnly(Value As String) As Boolean
IsLettersOnly = Len(Value) > 0 And Not UCase(Value) Like "*[!A-Z]*"
End Function
- 1. 檢查另一個字符串是否存在的最佳方法是什麼?
- 2. 確定字符串中第一個字符的最有效方法是什麼?
- 3. 確定Object是否被更改的最佳方法是什麼?
- 4. 確定5個數組中的某個字符串是否存在的最佳方法是什麼?
- 5. 確定bezier是否重疊一個圓的最佳方法是什麼?
- 6. 什麼是最有效的方式來判斷一個字符是否在PHP中是字母數字?
- 7. 確定字符串是否有值的最簡潔的方法是什麼?
- 8. 檢測兩個字符串是否相差一個字符的最佳方法是什麼?
- 9. 在VB6中,在運行時爲給定的LCID確定正確的字符集的最佳方式是什麼?
- 10. 測試Swift 4中CharacterSet是否包含字符的最佳方法是什麼?
- 11. 定義HTML5網頁字符集的最佳方法是什麼?
- 12. 最快的方法來確定是否兩個字符串由一個字符
- 13. 給字母添加口音的最佳方法是什麼?
- 14. 在SQL Server中,確定給定字符串是否爲有效XML的最佳方法是什麼?
- 15. 什麼是拆分字母和數字的最佳方式?
- 16. 解析這個字符串的最佳方法是什麼?
- 17. Java確定字符串中的每個字符是否是字母
- 18. 最快的方法來確定兩個字符串是否有大字符串中的單個字母不同
- 19. 什麼是增加一個字符串的最佳方式[jQuery]
- 20. 生成2個字符的字母數字字符串的最佳方法是什麼?
- 21. 在C++中標記字符串的最佳方法是什麼?
- 22. 什麼是在PHP中反轉字母的最佳方式
- 23. 確定NSString的第一個字符是否是一個數字
- 24. 解析字符串內的這個字符串的最佳方法是什麼?
- 25. 確定SQL Server中是否存在臨時表的最佳方法是什麼?
- 26. 確定變量是否爲特定對象的最佳方法是什麼?
- 27. 什麼是最簡單的方法來確定一個字符是否在Unicode範圍內,在Rust中?
- 28. 什麼是在VB6中找到不同字符串的最佳方式?
- 29. 什麼是替換字符串中不允許的字符的最佳方法?
- 30. 確定一個字符是否爲字母
完成使用。好主意,因爲這種方法適用於a..z和A..Z之外的字母。 – raven 2008-09-18 20:22:11
這是超優雅的,但只適用於使用拉丁字母的大小寫變體的語言。 – 2008-09-18 20:23:41