Page 1 sur 1

Utilisation de regexp_like en rpgle

Posté : mer. 27 avr. 2016, 10:03:35
par manae
bonjour,

Dans un programme rpgle, j'aurais à valider un zone texte contenant une adresse email venant d'une saisie à l'écran.
Pour simplifier le programme je voulais utiliser la fonction regexp_like
mais je n'arrive pas à utiliser cette fonction en SQLRPGLE.

mon code ci-dessous ne compile pas

cordialement

Code : Tout sélectionner

     H dftactgrp( *no ) decedit('0,')
     FTEST      CF   E             WORKSTN
     dexp                            45
     dxflag                            N
      /free
       exp='([a-zA-Z\d]{1}[\w\.-]+\@[\w\.-]+\.[a-zA-Z]{2,6})';
       dou *in03;
        exfmt test1;
        exec sql set :xflag=REGEXP_LIKE(:wemail,:exp);
        if xflag;
          wmess='Adresse email valide ...';
        else;
          wmess='Adresse email incorrecte ...';
        endif;
       enddo;

       *inlr=*on;
      /end-free    

REGEXP_COUNT

Posté : mer. 27 avr. 2016, 12:55:14
par cmasse
REGEXP_LIKE est un prédicat pas une fonction , ce qui veut dire qu'il ne peux être utilisé que dans une clause WHERE.


Utilisez à la place REGEXP_COUNT() qui est une fonction qui retourne le nbr de fois ou une expression régulière est vraie, 0 dans le cas contraire.

Posté : mer. 27 avr. 2016, 16:05:00
par manae
Bonjour,

j'ai trouvé le code pour utiliser REGEXP_LIKE !!!
je met le code ci-dessous avec l'expression régulière qui fonctionne
si cela peut etre utile à quelqu'un et l’écran si vous voulez tester !!!

Cordialement

Code : Tout sélectionner

#--ecran TEST --------------------------------------------------------
     A          R TEST1                                                            
     A                                      CF03(03)                       
     A                                  9  7'Email'                        
     A            WEMAIL        60A  B  9 14DSPATR(HI)                     
     A            WMESS         40A  O 14 14                               
#-----------------------------------------------------------
     H dftactgrp( *no ) decedit('0,')
     FTEST      CF   E             WORKSTN
     dex               s             72
     dxflag            s              1  0
      /free
       ex='^([a-zA-Z0-9]{1}[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-zA-Z]{2,6}\+
       s*)$'; 
       dou *in03;
        exfmt test1;
          exec sql set
            :xflag=case when REGEXP_like(:wemail,:ex) then 1 else 0 end ;
        if xflag<>0;
          wmess='Adresse email valide ...';
        else;
          wmess='Adresse email incorrecte ...';
        endif;
       enddo;

       *inlr=*on;
      /end-free