Aide sur IsMatch

  • Aide sur IsMatch

    Posté par Ange sur 8 novembre 2024 at 19h29

    Bonjour à tous,

    Je suis confronté à un petit problème avec la fonction IsMatch.

    C’est la première fois que je l’utilise et je ne comprends pas trop pourquoi elle me renvoie toujours false quelque soit les valeurs entrées.

    Le contexte :

    j’ai un DtaCardValue dans lequel j’ai une chaine de caractère du ce type : “TEF – VEF” ou “VG S-1 – VG”.

    Je vous mets le code qui me permet de savoir si dans cette chaine se trouve l’un des éléments suivants :

    <div>
    <div>VG, GVG, OP1, OP2, OP3, OP4.</div>
    <div> </div>
    <div> </div>
    <div>IsMatch(</div>
    <div>DataCardValue39.Text;</div>
    <div>”(VG|GVG|OP1|OP2|OP3|OP4)”</div>
    <div>)</div>
    <div> </div>
    <div> </div>
    <div>Cette formule me permettra de rendre visible ou invisible un conteneur, ou d’afficher une valeur dans un autre contrôle.</div>
    <div> </div>
    <div>Merci de votre aide.</div>
    </div>

    Ange a répondu 1 week, 5 days ago 2 Membres · 4 Réponses
  • 4 Réponses
  • Nelson

    Member
    8 novembre 2024 at 19h59

    Bonjour Ange,

    Voici la solution à ton souci :

    <div>

    IsMatch(DataCardValue39.Text;"(G?VG|OP[1-4])";MatchOptions.Contains)

    Dis, moi si cela te convient ou si tu as des questions.
    J'ai un peu amélioré ta regex après, ta manière de la réaliser était bonne aussi.
    N'hésite pas à mettre plus d'exemples la prochaine fois pour nous permettre de tester plus amplement pour pouvoir répondre au mieux.

    Bonne soirée et bon week-end


    </div>

  • Ange

    Member
    8 novembre 2024 at 22h20

    C’est super cette formule. Toutefois, lorsque j’ai dans la chaine GVGs-1 ou VGs-1

    le retour est true alors qu’il devrait être false.

  • Nelson

    Member
    8 novembre 2024 at 22h42

    C’est exactement pour ce genre de cas que j’aurai voulu avoir des exemples supplémentaires dès le début 😉

    Prenons ton exemple qui devrait être true :

    VG S-1 – VG

    Dans celui-ci j’ai deux fois VG mais lequel devrait être pris en compte ?

    Le 1er ou le second ?

    Imaginons que tu me dises qu’on doit prendre en compte le premier VG pour ce faire, tu vas devoir indiquer que ta ligne commence par ton match donc on va utiliser le symbole “^”

    Ce qui donne :

    <div>”^(G?VG|OP[1-4])”</div>
    <div> </div>
    <div>Maintenant dans le cas où tu me dirais : C’est le second qui compte et mon texte doit donc finir absolument par mes mots de match alors on utiliserait le symbole “$”</div>
    <div>Ce qui donne :</div>
    <div>
    <div>
    <div>”(G?VG|OP[1-4])$”</div>
    <div> </div>
    <div>Par contre, si tu nous dis que ton texte peut contenir ce que tu cherches à match mais pas que</div>
    <div>Exemple : GVGs-1 S-1 – VG etc etc</div>
    </div>
    </div>

    Ici, on voit qu’on a bien notre VG mais qu’il est précédé et suivi de texte dès lors on va l’indiqué de cette manière :

    <div>IsMatch(“GVGs-1 S-1 – VG etc etc”;”\s(G?VG|OP[1-4])\s”;MatchOptions.Contains)</div>

    L’utilisation de “\s” permet d’indiquer qu’avant et après notre mot à match (en l’occurence ici “VG”) il doit y avoir des espaces.

    Ceci évite d’avoir de faux positifs avec testVG, VGtest voir testVGtest

    Pour finir, si tu as comme texte : GVGs-1 – VG

    Et que tu voudrais match donc sur le 1er mot, tu vas devoir donc faire

    <div>

    “^(G?VG|OP[1-4])\s”

    Ainsi, tu indique au moteur de regex qu’il doit commencer par ton mot et que ton mot doit être suivi d’un espace.

    Ceci évitera justement d’avoir un faux positif avec GVGs-1.

    Pour le cas, ou tu veux match sur ton dernier mot donc : VG – GVGs-1

    Tu vas devoir inverser l’exemple ci-dessus de cette manière :

    “\s(G?VG|OP[1-4])$”

    Tu indique au moteur de recherches que tu as besoin d’un espace, suivi de ton mot à match et plus rien après.

    Voilà, j’ai essayé d’être un maximum exhaustif avec les données que tu m’as fourni.

    En espérant que cela puisse t’aider.

    </div>

    • This reply was modified 1 week, 5 days ago by  Nelson.
    • This reply was modified 1 week, 5 days ago by  Nelson.
  • Ange

    Member
    8 novembre 2024 at 23h39

    Merci !!!!!

    C’est exactement cela dont j’avais besoin : “\s(…..)$”

    ça fonctionne totalement.

Connectez-vous pour répondre.