Comment déterminer si ma chaine de caractères est un nombre ?
Plusieurs méthodes sont à votre disposition pour tester si une chaîne de
caractères représente une valeur est numérique. Nous vous montrerons deux des
méthodes les plus fréquemment utilisées.
IsNumeric est une fonction incluse dans VB, souvent assez connue.
MsgBox IsNumeric("12345,67")
Cette fonction, si elle a pour avantage d'être incluse dans Visual Basic, n'est pas pour
exempte de "problèmes". En effet, sur certains systèmes, IsNumeric vous
confirmera que "($1,23,,3.4,,,5,,E67$)" est bien une valeur numérique. S'il est vrai que
cette chaîne représente un nombre, il est rare de permettre d'utiliser de telles
notations dans une application. IsNumeric accepte aussi les représentations hexadécimales ("&h1F"),
et scientifiques ("2E5" ou "2D5"). Si ces deux derniers tests
sont plus pertinents, vous n'en avez pas forcément besoin.
Pour limiter à l'essentiel ce que peut entrer un utilisateur, vous pouvez
aussi tester la chaîne contre une expression
régulière :
MsgBox IsNumber("12345,67")
Private Function IsDigitsOnly(ByRef s As String) As Boolean
IsDigitsOnly = Not s Like "*[!0-9]*"
And LenB(s) > 0
End Function
Function IsNumber(ByVal Value As String) As Boolean
' Supprimez la ligne suivante si vous
ne
' souhaitez pas traiter les signes
plus/moins
If Value Like "[+-]*" Then Value =
Mid$(Value, 2)
IsNumber = Not Value Like "*[!0-9,]*"
And _
Not Value
Like "*,*,*" And _
Len(Value) >
0 And Value <> "," And _
Value <>
vbNullString
End Function
Souvent plus appropriée, cette méthode emploie des expressions régulières
qui restent des traitements lents.
Ce problème peut aussi être vu comme étant un problème d'automates à état fini, méthode robuste pour de telles vérifications.
Voir aussi : |