|
Mit den Visual Basic-Funktionen IsNumeric
können Sie feststellen, ob ein String einen numerischen Inhalt hat,
während die Funktion IsDate
prüft, ob der Inhalt einen Datums- und/oder Zeitwert darstellt. Die
Gegenstücke, ob ein String nur reine Textzeichen oder entsprechend
den lokalen Gepflogenheiten enthält, oder ob er nur reine
Textzeichen und Ziffern enthält, fehlen jedoch.
Immerhin gibt es die API-Funktionen IsCharAlpha
und IsCharAlphaNumeric.
Doch diese haben den kleinen Nachteil, dass sie nur ein einzelnes
Zeichen prüfen können.
Private Declare Function IsCharAlpha Lib "user32" _
Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharAlphaNumeric Lib "user32" _
Alias "IsCharAlphaNumericA" (ByVal cChar As Byte) As Long
Zu den VB-Funktionen IsNumeric und IsDate analoge Funktionen
IsAlpha und IsAlphaNumeric müssen daher erst Zeichen für Zeichen
des gesamten Strings prüfen, ehe die Entscheidung getroffen werden
kann.
Public Function IsAlpha(Text As String) As Boolean
Dim l As Long
For l = 1 To Len(Text)
If Not CBool(IsCharAlpha(Asc(Mid$(Text, l, 1)))) Then
Exit Function
End If
Next 'l
IsAlpha = True
End Function
Public Function IsAlphaNumeric(Text As String) As Boolean
Dim l As Long
For l = 1 To Len(Text)
If Not CBool(IsCharAlphaNumeric(Asc(Mid$(Text, l, 1)))) Then
Exit Function
End If
Next 'l
IsAlphaNumeric = True
End Function
Während sowohl diese beiden Funktionen als auch die
VB-Funktionen IsNumeric und IsDate eine Annahme prüfen, prüft die
Funktion StringType, um welche String-Art es sich handelt und gibt
einen entsprechenden Konstant-Wert zurück. Im optionalen Parameter
TestForDate legen Sie fest, ob auch eine Prüfung auf einen Datums-
und/oder Zeitwert erfolgen soll. Die Möglichkeit, diese Prüfung zu
unterdrücken macht Sinn, da ein Datumswert dann auch als lediglich
numerisch erkannt werden kann.
Public Enum StringTypeConstants
stMixed
stNumeric
stAlpha
stAlphaNumeric
stDate
End Enum
Public Function StringType(Text As String, _
Optional ByVal TestForDate As Boolean = True) _
As StringTypeConstants
Dim l As Long
Dim nAlphaNumeric As Boolean
Dim nAlpha As Boolean
Dim nAsc As Integer
If IsDate(Text) And TestForDate Then
StringType = stDate
ElseIf IsNumeric(Text) Then
StringType = stNumeric
Else
For l = 1 To Len(Text)
nAsc = Asc(Mid$(Text, l, 1))
If CBool(IsCharAlphaNumeric(nAsc)) Then
If Not nAlphaNumeric Then
If CBool(IsCharAlpha(nAsc)) Then
nAlpha = True
Else
nAlphaNumeric = True
nAlpha = False
End If
End If
Else
StringType = stMixed
Exit Function
End If
Next 'l
If nAlpha Then
StringType = stAlpha
ElseIf nAlphaNumeric Then
StringType = stAlphaNumeric
End If
End If
End Function
|