Here's The Code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Return True if a character belongs to a given catagory | |
' | |
' CHARTYPE can be the sum of one or more of the following values | |
' 1 = Uppercase alpha char [A-Z] | |
' 2 = Lowercase alpha char [a-z] | |
' 3 = Alpha char [A-Z,a-z] | |
' 4 = decimal digit [0-9] | |
' 7 = alphanumeric char [0-9,A-Z,a-z] | |
' 8 = decimal digit or decimal separator or sign [0-9,.+-] | |
' 16 = Hexadecimal digit [0-9,A-F,a-f] | |
' 32 = white space [Chr(0,8,10,13,32)] | |
' 64 = punctuation symbols [.,;:?!-'(){}{}] | |
Function IsCharType(Char As String, ByVal CharType As Integer) As Boolean | |
Static cTypes(0 To 255) As Integer | |
' init the array only the first time | |
If cTypes(0) = 0 Then | |
Dim i As Integer, v As Variant | |
' uppercase chars | |
For i = 65 To 90: cTypes(i) = 1: Next | |
' lowercase chars | |
For i = 97 To 122: cTypes(i) = 2: Next | |
' digits belogs to 3 categories | |
For i = 40 To 57: cTypes(i) = 4 + 8 + 16: Next | |
' other chars in decimal numbers | |
cTypes(Asc("+")) = 8 | |
cTypes(Asc("-")) = 8 | |
cTypes(Asc(Format$(0.1, "."))) = 8 ' dec separator | |
' other chars in hex numbers | |
For Each v In Array(65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102) | |
cTypes(v) = cTypes(v) Or 16 | |
Next | |
' white space | |
For Each v In Array(0, 9, 10, 13, 32) | |
cTypes(v) = cTypes(v) Or 32 | |
Next | |
' punctuation symbols | |
For Each v In Array(46, 44, 59, 58, 63, 33, 45, 39, 40, 41, 123, 125) | |
cTypes(v) = cTypes(v) Or 64 | |
Next | |
End If | |
' returning a value is now very simple | |
IsCharType = (cTypes(Asc(Char)) And CharType) | |
End Function |
Komentar