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

VB.NET Discussion :

Des IF, des IF, oui mais des AND aussi ! [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut Des IF, des IF, oui mais des AND aussi !
    Bonjour chers amis du vb.NET !

    Je cherche une réponse à une question ... con ... mais alors con ! mais je ne trouve pas de réponse pourtant !!!

    Voici mon soucis :

    Je souhaite vérifier qu'une URL (de type www.adresse.fr) soit saisie correctement dans un textbox (txt_source).

    Or pour cela je souhaite vérifier que l'utilisateur à bien mis un "www." ET un ".fr" OU ".net" OU ."com" OU ".org" (qui seront les seuls noms de domaine de premier niveau dont j'aurais besoin).

    Du coup j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if txt_source.contains("www.") = true and (txt_source.contains(".fr") = false or txt_source.contains(".net") = false or txt_source.contains(".com") = false or txt_source.contains(".org") = false) then
    msgbox("URL invalide", vbokonly + vbexclamation, "URL invalide")
    exit sub
    end if
    Le code est allégé. Mais l'idée est là. Le soucis est que j'ai toujours droit au msgbox même s'il y a bien "www." et ".fr" dans la chaîne string du textbox, et c'est valable pour ".com" ou ".net" etc ... pour vérifier la présence seule de "www." pas de soucis mais dès que j'essaie de demander si 2 morceaux de chaînes existent, il rentre dans le if comme si ".fr" n'y était pas, alors qu'il y est.

    J'espère avoir été clair, car ça peut faire des nœuds au cerveau éventuellement ! Je sais que c'est une question de débutant, mais j'ai jamais eu ce soucis jusque là pour comparer d'autres trucs. Je galère à trouver mon erreur là.

    Si vous avez des questions, mais surtout des réponses, n'hésitez pas à m'aider, ça me rend dingue ce truc !

    Merci beaucoup.

    Cordialement,

    --
    Shennong

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Tu n'as pas pris la meilleur solution pour ton cas, tu peux utiliser un regex ça sera beaucoup plus simple.
    Regarde donc du côté des expressions régulières, t'aura plein d'exemple sur le net.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Applique le Contains sur la propriété Text du TextBox.

    Si tu veux arrêter le traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      If Not (txt_source.Text.Contains("www.") And (txt_source.Text.Contains(".fr") Or txt_source.Text.Contains(".net") Or txt_source.Text.Contains(".com") Or txt_source.Text.Contains(".org"))) Then
          MessageBox.Show("incorrect : arrêt")
          Exit Sub
      End If
    txt_source.Text.Contains("www.") te renvoie vrai ou faux pas la peine de tester si c'est égal à vrai ou faux (idem pour les autres) et tu testes s'il y a un de vrai parmis les "Or".
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre habitué Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Points : 135
    Points
    135
    Par défaut
    Je viens d'essayer ta méthode Rvt26t et effectivement cela fonctionne parfaitement !

    Je ne connaissais pas l'utilisation du If not, qui rend la chose du coup plus logique et plus simple à appréhender.

    Merci beaucoup pour ton aide, je vais pouvoir avancer dans mon application. Je marque en résolu !


    Cordialement,

    --
    Shennong

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Oui mais avec ta technique si le gars écrit www.freddy.de par exemple ton test le validera.

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Pour compléter le dernier post ; tel quel le test dit bien "SI www. ET (AU MOINS UN dans .fr .net .com .org) NE sont PAS contenus dans la chaine ALORS on affiche le message d'erreur"

    Ainsi il suffit que la chaine contienne www. et l'un des noms de domaine (au moins) n'importe où pour que ce soit valide (= pas de message d'erreur) ; exemples:
    www.freddy.de contient bien www. et .fr (même si ça n'a rien à voir avec le nom de domaine)
    .fr.netwww.com.org contient tous les éléments mais pas le bon ordre (et plusieurs noms de domaine)

    Il faudrait (à la rigueur) une approche à base de StartsWith et de EndWith pour que ça puisse fonctionner correctement (et encore ça ne suffirait pas pour les cas de noms de domaine multiple)

    D'un autre côté une expression rationnelle résout le problème très simplement ; quelque chose dans ce style (en supposant que ce qu'il y a entre www. et le nom de domaine ne puisse être que des lettres des chiffres un tiret ou un underscore [à adapter sinon ])
    If Not Regex.IsMatch(txt_source.Text, "www\.[\w-]+\.(fr|net|com|org)", RegexOptions.IgnoreCase Or RegexOptions.ExplicitCapture) Then
    On est bien sûr pas obliger de toute faire en une ligne, conserver une instance de la regex à réutiliser à chaque fois peut-être intéressant (penser à rajouter l'option Compiled dans ce cas)

    Sinon petite question un peu HS ; vous n'aimez pas AndAlso et OrElse ? personnellement je n'utilise qu'eux (pour profiter de l'évaluation cour-circuitante) et jamais And et Or (à part bien entendu en tant qu'opérateur bit-à-bit où là on a pas le choix) et j'avoue que j'ai du mal à comprendre pourquoi on s'en servirait (encore) en tant qu'opérateur booléen (enfin à part avec un retour de méthode qui a des effets de bord qu'on souhaite systématiques mais c'est un cas rare et plus que bancal à la base)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @Sehnsucht : tout à fait d'accord avec toi en tout point

    Je n'utilise que AndAlso et OrElse du fait que la conditionnelle s'arrête si la condition requise n'est pas souhaitée.... après tout pourquoi le test conditionnel devrait continuer si au moins une des conditions n'est pas recherchée...o_O

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Des Google Glass, oui mais pourquoi ?
    Par Stéphane le calme dans le forum Actualités
    Réponses: 48
    Dernier message: 28/07/2017, 11h09
  2. Des dates, des dates oui mais des Panzanis
    Par bonuxis dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 29/07/2009, 17h27
  3. Bac + 5 … oui mais pourquoi ? des réponses
    Par Merfolk dans le forum Etudes
    Réponses: 38
    Dernier message: 31/12/2008, 02h02
  4. Des fibres ? Oui, mais pourquoi faire ?
    Par mchk0123 dans le forum Windows
    Réponses: 2
    Dernier message: 01/05/2007, 21h05
  5. [Parser] Oui mais des conseils ?
    Par JulienDuSud dans le forum Générateurs de compilateur
    Réponses: 8
    Dernier message: 12/09/2006, 11h40

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