Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 11: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 ( ,"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
          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 ( , + &
             )
    return - 1
  End if
  
  //----------------------------------------------------------------
    //----------------------------------------------------------------
  
  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 ( , )
    return -1
  end if
  
  //------------------------------------------------------------------------------------------------------
    //------------------------------------------------------------------------------------------------------
  
    lb_find = Match(Trim(ls_string_avant_arobas), "[^A-Za-z0-9\.\'\_\-]") 
  
  If lb_find  Then
    MessageBox ( ,"Votre adresse Email n'est pas valide." + &
             + &
             + &
            " ' ' ' ,  " + "  ' _ ' ,  " + "  ' . ' , " + "  ' - ', " + "  ' . ' " + "(" + ls_string_avant_arobas + ")" )
    Return - 1
  End If
  
  //----------------------------------------------------------------
    //----------------------------------------------------------------
  
  li_pos_virgule_apres_arobas = pos ( ls_email , "," , li_pos_arobas + 1 )
  
  If li_pos_virgule_apres_arobas > 0  then
    MessageBox ( , + &
             )
    return -1
  End if
  
  //----------------------------------------------------------------
    //----------------------------------------------------------------
  
  ll_longueur_email = len (ls_email)
  
  If ll_longueur_email > 256 then
    MessageBox ( , )
    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 ( , )
    return -1
  end if
  
  //--------------------------------------------------------------------
    //--------------------------------------------------------------------
   
  
  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 ( , )
    return -1
  end if
  
  //-------------------------------------------------
    //--------------------------------------------------
  
  li_max_point   = 0
  li_debut_point = li_pos_arobas + 1
  
  DO
          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 ( , )
    return - 1
  end if
  
  //----------------------------------------------------------------------------------
    //----------------------------------------------------------------------------------
  
  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 ( ,"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
  
  //--------------------------------------------------------------------------------------
    //--------------------------------------------------------------------------------------
  
  lb_find = Match(Trim(ls_string_apres_dernier_point), "[^A-Za-z0-9]")
  
  If lb_find Then
    MessageBox ( ,"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 11: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 12:11:18

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4681
Pépites: 1,013
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 06: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 15: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 15: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 )
  
    lb_find = Match(Trim(ls_string_apres_arobas), "[^A-Za-z]") 
  
  If lb_find  Then
    as_retour = "Votre adresse Email n'est pas valide." + &
             +  "( " + ls_string_apres_arobas + " )" 
     Return - 1
  End If
  

Hors ligne

 

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

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

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

Merci pour ce code

Anpi

Hors ligne

 

#8 09-11-2007 13: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 13: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 09: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