Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

#1 22-03-2007 10:56:02

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

[SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

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

Code: pb

//  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

Code: pb

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

 

#2 22-03-2007 10:59:53

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#3 22-03-2007 11:11:18

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

00


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#4 23-03-2007 05:47:46

mreminiac  
Membre Geek
Lieu: Marseille
Date d'inscription: 29-05-2006
Messages: 56
Pépites: 321
Banque: 0

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

Merci

à wazou7812

ca tombe pil poil je suis sur le ctrl client  de commande

Cordialement à tous


Migration PB11
Oracle 9I
XP Pro

Hors ligne

 

#5 26-03-2007 13:39:03

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

ha bon, on code la même chose alors ??

Hors ligne

 

#6 06-07-2007 13:14:13

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

Il faut ajouter un autre controle : le premier caractère derrière l'arobas doit être une lettre .


Code: pb

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

 

#7 06-07-2007 13:33:46

Anpi  
Membre Geek
Date d'inscription: 22-04-2007
Messages: 59
Pépites: 3,000
Banque: 9,223,372,036,854,776,000

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

Merci pour ce code

Anpi

Hors ligne

 

#8 09-11-2007 12:42:46

elbrizzio  
Bienfaiteur du site
Award: bf
Lieu: Leuven
Date d'inscription: 12-03-2007
Messages: 206
Pépites: 33,275
Banque: 2,109,818,425,070

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

Merci pour le code wazou1812.
Il m'a été bien utile.

Hors ligne

 

#9 09-11-2007 12:57:40

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

A votre bon coeur Messieurs Dame.....

Hors ligne

 

#10 22-04-2008 07:45:37

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

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 :

Code: pb

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

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [SOURCE] Deux petites fonctions qui permettent de controler une adresse Email

Pied de page des forums

Propulsé par FluxBB 1.2.22