Séparer 2 adresses emails – Split ";

Étiquetté : 

  • Séparer 2 adresses emails – Split ";

    Posté par Mimii sur 21 avril 2022 à 10h07

    Bonjour à tous,

    J’aurais besoin de votre aide pour séparer deux adresse email avec un “;”. Le but est de remplir manuellement des adresse emails dans un TextBox. Les adresses emails sont par la suite sauvegarder dans une liste (SharePoint). Tout à l’air de fonctionner parfaitement sauf le Split.

    Mon code est celui ci:

    TextBox:

    OnChange = ClearCollect(collectionEmail; txtEmail.Text)

    Label:

    Text = If(IsMatch(txtEmail.Text; Email) = false; "Invalid email"; "")

    Ce code fonctionne, et à été sauvegarder dans le SharePoint:

    Ensuite j’ai essayé plusieurs code trouvé en ligne sur le OnChange du TextBox:

    Right(txtEmail.Text; Find(";"; txtEmail.Text)) 
    Concat(Split(Text(txtEmail.Text); ";"); Result) 
    (Last(FirstN(Split(txtEmail.Text; ";"); 1)).Result)
    First(Split(txtEmail.Text; ";")).Result

    Ceci ne semble pas vraiment fonctionner même si j’ai pas forcément d’erreur. J’ai rajouté manuellement le ; mais c’est comme si les deux adresses emails sont sauvegarder comme 1 adresse email;

    Comment je peux résoudre ce problème?

    Merci d’avance pour votre coup de pouce 😄

    PostID=rfGsKIJq3osCCIZ

    Mimii a répondu Il y a 11 mois, 4 semaines 1 Membre · 2 Réponses
  • 2 Réponses
  • Guillaume RENARD

    Membre
    21 avril 2022 à 13h50

    Bonjour @Mimii,

    Pour être sûr de bien comprendre ton besoin, tu disposes dans ton application Power Apps un champ texte, dans lequel l’utilisateur peut saisir plusieurs addresses mails, séparées par des “;” ?

    Peux-tu indiquer quel est le type de champ SharePoint que tu utilises pour sauvegarder cette donnée ? Et si possible nous montrer le code qui te permet de sauvegarder cette donnée dans SharePoint.

    J’en profite également pour te proposer une autre écriture dans la formule d’affichage du message d’erreur dans ton label. Tu utilises actuellement ceci :

    If(IsMatch(txtEmail.Text; Email) = false; "Invalid email"; "")

    La fonction IsMatch() renvoyant une valeur true ou false, tu peux directement écrire

    If(!IsMatch(txtEmail.Text; Email); "Invalid email")

    Tu peux également l’améliorer en testant chacune des addresses séparées par le “;” :

    If(n    Len(n        Concat(n            Split(TextInput1.Text;";");n            If(n                IsBlank(Trim(Result)) || (CountRows(MatchAll(Result; "@")) = 1 && IsMatch(Result;Match.Email));n                "";n                "Error"n            )n        )n    ) > 0; "Invalid email"n)

    La fonction Concat() permet ici de vérifier pour chacune des entrées du tableau de valeurs renvoyées par la fonction Split(), si celle-ci respecte bien le format d’email.

    J’ai ajouté deux éléments dans la condition If() :
    – le premier pour ne pas remonter d’erreur si un “;” ou “; ” a été ajouté à la fin du champ texte
    – le second pour valider que c’est au format attendu : IsMatch(Email) ET avec un seul “@” (la fonction IsMatch() renvoyant true si l’addresse mail contient deux “@”)

    Je mesure enfin la longeur de la chaîne renvoyée par la fonction Concat()

    Avec cette formule, les entrées suivantes sont bien remontées en erreur :
    – test@test@test.com
    test@test.com; test

    Celle-ci est en revanche considérée comme correcte :
    test@test.com;

    CommentID=juvH0XeAMxOFgw2, PostID=rfGsKIJq3osCCIZ

  • Mimii

    Membre
    22 avril 2022 à 11h03

    Bonjour @Guillaume RENARD,

    Merci beaucoup pour votre réponse !

    Le problème a été résolu en rajoutant “;” a la bonne place. Je vais prendre note pour améliorer mon code de validation. Je n’avais pas pensé que le test@test@test.com allait être validé avec mon code actuel. Je vais directement changer cela. Un grand merci !

    CommentID=m5kqF48YZ3rjEqi, PostID=rfGsKIJq3osCCIZ

Connectez-vous pour répondre.