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

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 14 mars 2004 à 14:18
Doombilbo Messages postés 5 Date d'inscription mercredi 28 novembre 2001 Statut Membre Dernière intervention 1 février 2008 - 11 mai 2004 à 11:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21154-asp-net-petite-fonction-de-test-d-un-entier

Doombilbo Messages postés 5 Date d'inscription mercredi 28 novembre 2001 Statut Membre Dernière intervention 1 février 2008
11 mai 2004 à 11:51
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 :)
cs_Domilo Messages postés 32 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 22 février 2005
3 mai 2004 à 09:43
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.
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 avril 2004 à 21:02
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é ...
PatriceVB Messages postés 562 Date d'inscription dimanche 16 décembre 2001 Statut Modérateur Dernière intervention 26 décembre 2007
2 avril 2004 à 20:34
euh...
c pas pareil que ça ?

dim truc as string
if isnumeric(truc) then
'c du numerique
else
' c pas du numerique
end if
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
14 mars 2004 à 14:18
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é
Rejoignez-nous