IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment effectuer un test sur un type de variable?


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut Comment effectuer un test sur un type de variable?
    Bonjour Tous Le monde

    J'ai un champ de saisie, au sein duquel l'utilisateur doit saisir uniquement un code composer de 10 chiffres sans aucun autre caractère ou bien lettre...

    J'ai eu l'idée de faire un test, pour savoir si le code saisie est acceptable dans la forme ou non?

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
                if (5 is decimal)
                {
                    Label1.Text = "good";
                }
    Ceci ne marche pas!

    Quelqu'un aurait une solution SVP

  2. #2
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    je te conseille d'utiliser les regexp.
    Tu trouveras des exemples très complet sur le net.

    bon courage

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Comme le dit Bizet, avec cette regexp (^[0-9]{1,10}$) tu vérifieras que ton champs contient entre 1 et 10 des chiffres.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Text.RegularExpressions.Regex MyRegex= new System.Text.RegularExpressions.Regex(@"^[0-9]{1,10}$");
    bool IsCorrect = MyRegex.IsMatch("la valeur de la saisie");

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    1. TryParse sera plus juste

    2. decimal est un type à virgule flottante pour les calculs scientifiques et financiers. 5 est un int

    3. Si tu testes dans le OnKeyPressed/OnKeyQuelqueChose, méfie-toi du copier-coller

    4. la remarque sur les regex est pertinente

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    @Arnard,
    j'avais un doute sur le TryParse sur une string genre "0000012345".
    Je viens de vérifier et ça passe en effet.
    Par contre, le TryParse renvoie aussi true sur une saisie de type "00000123456".
    Or, hazem2410 veut maximum 10 caractères.

    Donc je pense que Bizet avait vu juste et que la regexp est toute indiquée.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Ta remarque est pertinente calagan99, mais au vu du code posté, j'émets l'hypothèse qu'il teste via des appels OnKey... donc exécutés à chaque touche... De plus, un mTextbox.Text.Length peut renvoyer la longueur...

    Par contre, si 10 caractères, mise sur uint32.TryParse, tu t'exposes à un overflow avec un int.tryParse

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Citation Envoyé par Arnard Voir le message
    Ta remarque est pertinente calagan99, mais au vu du code posté, j'émets l'hypothèse qu'il teste via des appels OnKey... donc exécutés à chaque touche... De plus, un mTextbox.Text.Length peut renvoyer la longueur...
    Exact

    Citation Envoyé par Arnard Voir le message
    Par contre, si 10 caractères, mise sur uint32.TryParse, tu t'exposes à un overflow avec un int.tryParse
    Encore exact.
    Mais cette fois-ci, il est clair que la regex s'impose

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Après, la solution qu'il choisit... La remarque avait surtout pour but de lui signifier de ne pas stocker dans un int, mais qu'un decimal n'est pas là pour ça...

    De plus, à moins qu'il ne choisisse de stocker dans une String derrière (choix étrange mais pourquoi pas), il n'échappera alors pas au Parse

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Au moins, il aura toutes les cartes en mains.
    Je pense que l'on a été assez précis

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut
    Merci calagan99 pour la réponse. Mais, STP, j'ai besoin de plus de précision.

    J'ai un champ TextBox1 de saisie, alors comment l’intégrer dans le code?

  11. #11
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Citation Envoyé par hazem2410 Voir le message
    Merci calagan99 pour la réponse. Mais, STP, j'ai besoin de plus de précision.

    J'ai un champ TextBox1 de saisie, alors comment l’intégrer dans le code?
    Tu plaisantes ?
    Comment je peux être plus précis que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Text.RegularExpressions.Regex MyRegex= new System.Text.RegularExpressions.Regex(@"^[0-9]{1,10}$");
    bool IsCorrect = MyRegex.IsMatch("la valeur de la saisie");
    Tu as juste à y remplacer "la valeur de la saisie" par le contenu de ton Textbox1... (TextBox1.Text)...

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Points : 77
    Points
    77
    Par défaut
    Je m'excuse j'ai pas lu bien l'entre cotes

    Mais ce code accepte même des codes à moins de 10 chiffres!

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 72
    Points : 51
    Points
    51
    Par défaut
    Et bien il suffit de modifier la regexp en faisant quelque chose comme :
    Au lieu de :

  14. #14
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Text.RegularExpressions.Regex MyRegex= new System.Text.RegularExpressions.Regex(@"^[0-9]{10}$");
    bool IsCorrect = MyRegex.IsMatch("la valeur de la saisie");
    Un petit effort d'interprétation t'aurais suffit pour comprendre le rôle de "{1,10}" dans la regex...
    En passant donc à "{10}", tu ne valideras que des chaines numériques de 10 caractères.

  15. #15
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    Au moins, il aura toutes les cartes en mains.
    Je pense que l'on a été assez précis
    Pas suffisamment il faut croire

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2009, 10h38
  2. [E-03] Test sur un type de variable
    Par sincenono dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 07/03/2009, 12h59
  3. Comment faire un test sur un pchar ?
    Par Mickey.jet dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2006, 16h53
  4. tests sur le type de valeurs
    Par dor_boucle dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/03/2006, 14h10
  5. Comment faire un test sur "" ?
    Par magic8392 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/09/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo