Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP.NET - PETITE FONCTION DE TEST D'UN ENTIER


Information sur la source

Catégorie :ASP.Net Source .NET ( DotNet ) Niveau : Débutant Date de création : 12/03/2004 Vu : 8 326

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

Il est très utile de pouvoir tester si une chaine de caractère peut être convertit en Integer avant de faire un Ctype (où on doit alors gérer le cas d'erreur).

J'ai donc récupéré une Expression régulière sur le site :
- http://regexlib.com

Et réadapté à mon besoin, puis intégré dans une fonction que je peux appeler simplement (la fonction renvoie un booleen).
 

Source

  • ' -----------------------------------------------------
  • Public Shared Function IsInteger(ByVal strTmp As String) As Boolean
  • Dim objIntPattern As New System.Text.RegularExpressions.Regex("^[0-9]+[0-9]*$")
  • Return objIntPattern.IsMatch(strTmp)
  • End Function
  • '-------------------------------------------------------------
  • 'On l'appelle donc simplement comme ceci :
  • If IsInteger(MaVariableString) Then
  • Response.Write "C'est un entier"
  • Else
  • Response.Write "Ce n'est pas un entier"
  • End If

' -----------------------------------------------------
Public Shared Function IsInteger(ByVal strTmp As String) As Boolean
 Dim objIntPattern As New System.Text.RegularExpressions.Regex("^[0-9]+[0-9]*$")
 Return objIntPattern.IsMatch(strTmp)
End Function

'-------------------------------------------------------------

'On l'appelle donc simplement comme ceci :

If IsInteger(MaVariableString) Then
 Response.Write "C'est un entier"
Else
 Response.Write "Ce n'est pas un entier"
End If

Conclusion

Pensez à consulter très régulièrement le site précité, il est plutot bien fait et de nombreuses RegExp peuvent vous sauver de bien des tests.

Bon coding

F___
 

Commentaires et avis

signaler à un administrateur
Commentaire de jesusonline le 14/03/2004 14:18:39 administrateur CS

Pas mal mais un peu trop general, les integer sont compris entre -2^31 et 2^31 -1, or tu ne geres pas les depassements de capacité ni les négatifs donc voici une source qui gere les integers

    Public Function isInteger(ByVal _Value As String) As Boolean
        Dim objIntPattern As New System.Text.RegularExpressions.Regex("^[-]?0*\d{1,10}$")
        If objIntPattern.IsMatch(_Value) = True Then
            If CType(_Value, Decimal) <= 2 ^ 31 - 1 And CType(_Value, Decimal) >= 2 ^ 31 Then
                Return objIntPattern.IsMatch(_Value)
            End If
        Else
            Return False
        End If

    End Function

Le regexp accepte les nombres négatifs néglige les 0 qu'il y a devant le nombre et n'accepte pas plus de 10 chiffres car 2^31=2 147 483 648

J'ai comparé cette méthode avec celle ci :

                Try
                    i = CInt(s)
                Catch ex As Exception
'C'est pas un integer
                End Try

Pour convertir une chaine en integer la premiere fonction est autour de 10% plus rapide mais peut etre optimisé en supprimant la conversion du nombre en decimal pour le comparer à 2^31 via les regexp mais ca ferait une chaine plutot tres compliqué

signaler à un administrateur
Commentaire de PatriceVB le 02/04/2004 20:34:46 administrateur CS

euh...
c pas pareil que ça ?

dim truc as string
if isnumeric(truc) then
      'c du numerique
else
      ' c pas du numerique
end if

signaler à un administrateur
Commentaire de jesusonline le 02/04/2004 21:02:44 administrateur CS

Si c'est vrai :p

Mais moi ce qu'il m'a plus c'est l'utilisation des RegExp, je me suis servis de ce code dans une classe que j'ai nommé validation, qui me permet de tester si c'est un integer un decimal mais aussi une adresse mail ...

Je vais peut etre la mettre ce soir mais je l'ai pas encore commenté ...

signaler à un administrateur
Commentaire de Domilo le 03/05/2004 09:43:22

Bonjour,

IsNumeric est pas mal, mais ne dira pas si le nombre est de type entier. Donc à l'affectation à la variable entier, un arrondi sera fait "à l'insu de ton plein grès" ! (ce qui pourrait-être génant)

^[0-9]+[0-9]*$ permet de reconnaitre les entiers POSITIFS, et peut, je croie, être simplifié en ^[0-9]+$

Si vous voulez repérer les positifs et NEGATIFS il me semble que feront l'affiare :
-     ^-?[0-9]+$
-     ^[-+]?[0-9]+$    (si le positif peut être précédé d'un plus "+")

Si vous voulez repérer un nombre positif à 5 digits au maximum (< 100 000)
^[0-9]{1,5}$

Je vous conseil le logiciel Expresso (gratuit) pour pouvoir maitriser les RegEx...

A+
Dom.

signaler à un administrateur
Commentaire de Doombilbo le 11/05/2004 11:51:18

thx Fabrice c une bonne mise en jambe des expressions régulières.
en + c vraiment utile pour convertir des variables de querystring etc.
bon boulot :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.