Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour,
Deux petites fonctions permettant de controler une adresse email.
La première permet de "découper" une chaine de caractères qui contiendrait plusieurs adresse email séparées par un point virgule.
La deuxième permet de controler la bonne syntaxe de l'adresse email. (Elle ne controle pas l'existance de l'adresse email).
Les deux fonctions peuvent et/ou doivent être enchainer.
1 °) Découpage d'une adresse Email
// INPUT PARAMS: as_liste_email : adresse email : peut comporter plusieurs adresses // // OUTPUT PARAMS: as_tableau_email[] : tableau des emails string ls_chaine string ls_emails integer li_retour integer li_debut_pvirgule , li_pos_pvirgule , li_max_pvirgule integer tli_pos_pvirgule[] integer li_x_pvirgule integer li_debut , li_fin , li_taille ,li_nb_email=0 //--------------------------------------------------- // Recherche du nombre de point virgule //--------------------------------------------------- ls_emails = trim (as_liste_email) IF IsNull(ls_emails) THEN ls_emails="" end if //------------------------------------------ // si c est vide ou null // on ne traite pas //-------------------------------------------- IF IsNull(ls_emails) or ls_emails = "" THEN li_nb_email=0 return 1 end if //------------------------------------------------- // Nombre de point virgule ";" //-------------------------------------------------- li_debut_pvirgule = 1 DO li_pos_pvirgule = pos ( ls_emails , ";" ,li_debut_pvirgule) //si li_pos_pvirgule = 0 ==> pas trouve on sort IF li_pos_pvirgule < 1 THEN EXIT END IF //-- on a trouve li_max_pvirgule ++ tli_pos_pvirgule [li_max_pvirgule] = li_pos_pvirgule li_debut_pvirgule = li_pos_pvirgule + 1 LOOP UNTIL false //---------------------------------------------- // si pas de point virgule on prend le premier //----------------------------------------------- IF li_max_pvirgule = 0 THEN as_tableau_email[1] = as_liste_email li_nb_email = 1 RETURN 1 END IF //----------------------------------------------- // Decoupage de la chaine en un tableau d email //----------------------------------------------- for li_x_pvirgule = 1 to li_max_pvirgule //--- traitement premier ";" li_nb_email++ IF li_x_pvirgule = 1 THEN li_debut = 1 li_fin = ( tli_pos_pvirgule [1] ) - 1 END IF //--- traitement courant ";" IF li_x_pvirgule <> 1 THEN li_debut = ( tli_pos_pvirgule [ li_x_pvirgule -1 ] ) + 1 li_fin = ( tli_pos_pvirgule [li_x_pvirgule] ) - 1 END IF li_taille = ( li_fin - li_debut ) + 1 as_tableau_email [ li_nb_email ] = mid ( as_liste_email , li_debut , li_taille ) ls_chaine = mid ( as_liste_email , li_debut , li_taille ) next //---------------------------------------- // traitement du dernier email //------------------------------------------ li_nb_email++ li_debut = tli_pos_pvirgule [li_max_pvirgule] +1 li_fin = len (as_liste_email ) li_taille = ( li_fin - li_debut ) + 1 as_tableau_email [ li_nb_email ] = mid ( as_liste_email , li_debut , li_taille ) ls_chaine = mid ( as_liste_email , li_debut , li_taille ) return 1
2°) controle de la structure de l'adresse email
integer li_pos_arobas , li_pos_virgule_apres_arobas string ls_email , ls_string_avant_arobas , ls_premier_charactere , ls_dernier_charactere ,ls_string_apres_arobas long ll_longueur_email , ll_longueur_apres_arobas integer li_pos_point , li_debut_point , li_max_point integer tli_pos_point[] , tli_pos_arobas[] string ls_string_apres_dernier_point long ll_longueur_apres_dernier_point , ll_dernier_point boolean lb_find = false integer li_nb_email , ll_mail li_nb_email = upperbound(as_adresse[]) for ll_mail = 1 to li_nb_email ls_email = as_adresse[ll_mail] IF IsNull(ls_email) or trim(ls_email) ="" THEN return 1 end if //------------------------------------------------- // Recherche de la position du arobas @ //-------------------------------------------------- li_pos_arobas = pos ( ls_email , "@" ) if li_pos_arobas = 0 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, elle ne contient pas @. " + "(" + ls_email + ")" ) return -1 end if //------------------------------------------------- // Recherche si l'adresse email contient plusieurs arobas //-------------------------------------------------- li_debut_point = 1 li_max_point = 0 DO //recherche du dernier point après le arobas li_pos_point = pos ( ls_email , "@" , li_debut_point ) //si li_pos_point = 0 ==> pas trouve on sort IF li_pos_point < 1 THEN EXIT END IF //-- on a trouve li_max_point ++ tli_pos_arobas[li_max_point] = li_pos_point li_debut_point = li_pos_point + 1 LOOP UNTIL false IF li_max_point > 1 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, la chaine de caractère contient plusieurs fois l'@." + & "~r~rSi vous voulez mettre plusieurs adresses, mettez un ';' pour séparer les adresses." ) return - 1 End if //---------------------------------------------------------------- // Recherche si il y a une chaine de caractère avant l'arobas //---------------------------------------------------------------- ls_string_avant_arobas = Mid ( ls_email, 1 , li_pos_arobas - 1 ) If Isnull(ls_string_avant_arobas) or trim(ls_string_avant_arobas) = "" then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, elle ne contient aucun caractère avant l'@." ) return -1 end if //------------------------------------------------------------------------------------------------------ // Recherche si la chaine de caractère avant le arobas contient autre chose que a-z A-Z 0-9 _ . - //------------------------------------------------------------------------------------------------------ //si true => la chaine contient des caractères interdits lb_find = Match(Trim(ls_string_avant_arobas), "[^A-Za-z0-9\.\'\_\-]") If lb_find Then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide." + & "~rLa chaîne de caractère se trouvant avant l'@ ne doit contenir que des chiffres ou des lettres " + & "~rou les caractères " + & " ' ' ' , " + " ' _ ' , " + " ' . ' , " + " ' - ', " + " ' . ' " + "(" + ls_string_avant_arobas + ")" ) Return - 1 End If //---------------------------------------------------------------- // Recherche si il y a une virgule après le arobas //---------------------------------------------------------------- li_pos_virgule_apres_arobas = pos ( ls_email , "," , li_pos_arobas + 1 ) If li_pos_virgule_apres_arobas > 0 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, elle contient une virgule après l'@." + & "~r~rSi vous voulez mettre plusieurs adresses, mettez un ';' pour séparer les adresses." ) return -1 End if //---------------------------------------------------------------- // L'adresse ne doit pas être plus longue que 256 caracters //---------------------------------------------------------------- ll_longueur_email = len (ls_email) If ll_longueur_email > 256 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, la longueur ne doit pas dépasser 256 caractères." ) return -1 End if //---------------------------------------------------------------- // L'adresse ne peut commencer ou finir par une virgule //---------------------------------------------------------------- ls_premier_charactere = Mid ( ls_email, 1 , 1 ) ls_dernier_charactere = Mid ( ls_email, ll_longueur_email , ll_longueur_email ) if ls_premier_charactere ="," or ls_dernier_charactere ="," then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, le premier et le dernier caractère ne doivent pas être un virgule." ) return -1 end if //-------------------------------------------------------------------- // la longueur de la chaine apres le arobas doit être renseignée //-------------------------------------------------------------------- ls_string_apres_arobas = Mid ( ls_email, li_pos_arobas + 1 , ll_longueur_email ) If Isnull(ls_string_apres_arobas) or trim(ls_string_apres_arobas) = "" then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, elle ne contient aucun caractère après l'@." ) return -1 end if //------------------------------------------------- // Recherche du dernier point après le arobas //-------------------------------------------------- li_max_point = 0 li_debut_point = li_pos_arobas + 1 DO //recherche du dernier point après le arobas li_pos_point = pos ( ls_email , "." , li_debut_point ) //si li_pos_point = 0 ==> pas trouve on sort IF li_pos_point < 1 THEN EXIT END IF //-- on a trouve li_max_point ++ tli_pos_point[li_max_point] = li_pos_point li_debut_point = li_pos_point + 1 LOOP UNTIL false IF li_max_point = 0 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, la chaine de caractère se trouvant après l'@ ne contient pas de point." ) return - 1 end if //---------------------------------------------------------------------------------- // Vérifier que le top-level du subdomain fait au moint 2 caractères. //---------------------------------------------------------------------------------- ll_dernier_point = UpperBound(tli_pos_point) ls_string_apres_dernier_point = Mid ( ls_email, tli_pos_point[ll_dernier_point] + 1 , ll_longueur_email ) ll_longueur_apres_dernier_point = len(ls_string_apres_dernier_point) If ll_longueur_apres_dernier_point < 2 then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide, la longueur domaine de premier niveau (.fr ou .com ...) doit faire au moins 2 caracteres. " + "(" + ls_string_apres_dernier_point + ")") return -1 End if //-------------------------------------------------------------------------------------- // Recherche si la chaine de caractère du subdomain contient autre chose que a-z A-Z 0-9 //-------------------------------------------------------------------------------------- lb_find = Match(Trim(ls_string_apres_dernier_point), "[^A-Za-z0-9]") If lb_find Then MessageBox ("Contrôle de l'adresse Email" ,"Votre adresse Email n'est pas valide." +& "~Le domaine de premier niveau ne doit contenir que des chiffres ou des lettres . " + "(" + ls_string_apres_dernier_point + ")") Return - 1 End If Next Return 0
Hors ligne
Hors ligne
00
Hors ligne
Merci
à wazou7812
ca tombe pil poil je suis sur le ctrl client de commande
Cordialement à tous
Hors ligne
ha bon, on code la même chose alors ??
Hors ligne
Il faut ajouter un autre controle : le premier caractère derrière l'arobas doit être une lettre .
ls_string_apres_arobas = Mid ( ls_email, li_pos_arobas + 1 , 1 ) //si true => la chaine contient des caractères interdits lb_find = Match(Trim(ls_string_apres_arobas), "[^A-Za-z]") If lb_find Then as_retour = "Votre adresse Email n'est pas valide." + & "~rLe premier caractère se trouvant après l'@ doit contenir une lettre. " + "( " + ls_string_apres_arobas + " )" Return - 1 End If
Hors ligne
Merci pour ce code
Anpi
Hors ligne
Merci pour le code wazou1812.
Il m'a été bien utile.
Hors ligne
A votre bon coeur Messieurs Dame.....
Hors ligne
Pour le point 2°) controle de la structure de l'adresse email
un exemple de code avec la commande Match, pris dans [SOURCE] PB 11.1 WEBFORM - Send PDF as Email attachment, avec un sle_1 qui contient l'adresse et un mle_1 qui reçoit le message :
mle_1.hide() string email1 string email1flag email1 = trim(sle_1.text) If email1 = "" or email1 = "enter email address" then mle_1.text = "ERROR: YOU MUST ENTER A VALID EMAIL ADDRESS IN THE EMAIL FIELD" mle_1.show() return end if If email1 <> "" and email1 <> "email address1" then if match(email1,'^[a-zA-Z0-9][a-zA-Z\0-9\-_\.]*[^.]\@[^.][a-zA-Z\0-9\-_\.]+\.[a-zA-Z\0-9\-_\.]*[a-zA-Z\0-9]+$') then email1flag = 'Y' mle_1.text = "FIRST EMAIL IS GOOD" else mle_1.text = "THE EMAIL ADDRESS IS NOT FORMATTED CORRECTLY" mle_1.show() return end if end if
Hors ligne
Pages: 1