Formulaire et preg_match

paguira Messages postés 12 Date d'inscription lundi 8 janvier 2007 Statut Membre Dernière intervention 1 octobre 2008 - 20 janv. 2008 à 14:05
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 21 janv. 2008 à 11:49
Je poste une fonction qui permet de traiter des données provenent de formulaire dont voici le code :
$Value = donnée POST ou GET
$Type = type de donné alpa, numerique url etc...
$Minimum = caractére minimum
$Maximum = caractére maximum
$Necessary = true ou false nécéssaire ou non
$Error_txt   = texte du message d'erreur
$Error_Necessary_txt = texte du message d'erreur si obligatoire

function form_treatment ($Value, $Type, $Minimum, $Maximum, $Necessary, $Error_txt, $Error_Necessary_txt=false){
    $Answer = false;
    if(!$Value && $Necessary){
        $Answer = $Error_Necessary_txt;   
    }
   
    if($Value && !$Answer){
        $Array_Reg = array(
                    'alpha'     => '^[[:alpha:]]',
                    'digit'        => '^[[:digit:]]',
                    'price'        => '^[0-9]*\.?[0-9]+$',
                    'alnum'        => '^[[:alnum:]]',
                    'alpha_all'    => '^[A-Za-z,\' éèêëàâîïôûùüç_-]',
                    'alnum_all'    => "^[A-Za-z0-9,-\'' éèêëàâîïôûùüç_-]",
                    'login'        => '^[a-zA-Z][a-zA-Z0-9]',
                    'mail'        => '(^[[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)@([[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)\.([[:alnum:]]|-|_|\.)*',
                    'url'        => '^(http|https)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                    'ftp'        => '^(ftp|ftps)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                    'datefr'    => '^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$',
                    'datefr2'    => '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$',
                    'dateus'    => '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$',
                    'dateus2'    => '^[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$',
                    'year'        => '^[0-9]{4}$',
                    'H_M'        => '^[0-2][0-9]:[0-5][0-9]$',
                    'H_M_S'        => '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$',
                    'H_M2'        => '^[0-9]{1,2}:[0-9]{1,2}$',
                    'H_M_S2'    => '^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$',
                    );   
           
   
        if(is_array($Array_Reg)){
                foreach( $Array_Reg as $key => $value ){
                    if($Type == $key){
                        if($Minimum && $Maximum){
                            if(!ereg($value."{".$Minimum.",".$Maximum."}$", $Value)): $Answer = $Error_txt; endif;
                        }elseif($Minimum && !$Maximum){
                            if(!ereg($value."{".$Minimum.",}$", $Value)): $Answer = $Error_txt; endif;
                        }else{
                            if(!ereg($value, $Value)) : $Answer = $Error_txt; endif;
                        }
                    }
                }   
        }
    }
    return $Answer;
}

Je souhaite utiliser de " preg-match " à la place des "ereg" actuellement j'ai refait les masque des expressions régulière qui sont devenu :

$Array_Reg = array(
                'alpha'     => '^[[:alpha:]]',
                'digit'        => '^[[:digit:]]',
                'alnum'        => '^[[:alnum:]]',
                'alpha_all'    => '^[a-zA-Zéèêëàâîïôûùüçñ]',
                'alnum_all'    => '^[A-Za-z0-9,\' éèêëàâîïôûùüçñ-]',
                'login'        => '^[a-zA-Z][a-zA-Z0-9]',
                //'mail'        => '(^[:alnum:]+)([_|\.|-]*)([:alnum:]+)@([:alnum:]+)([_|\.|-]*)([[:alnum:]]+)\.([:alnum:]|-|_|\.)*)',
                //'mail'        => '(^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)@(^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)\.([a-zA-Z0-9]))',
                'name' => '(^[ a-zA-Zéèêôâîûäüöëï]+([\'-]?[ a-zA-Zéèêôâîûäüöëïçñ]+)',
                'mail'        => '((^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)@([a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)\.[a-zA-Z]{2,3}$)',
                //'mail'=> '^([^@\s<&>]+)@(?:([-a-z0-9]+)\.)+([a-z]{2,})$',
                //'mail'        => '(^[[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)@([[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)\.([[:alnum:]]|-|_|\.)*',
               
                //preg_match("/^[\ a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i", $email)) {
                //'mail'        => '^[[:alnum:]]+([_|\.|-]*)([[:alnum:]]+)@([[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)\.([[:alpha:]]{3}$)',
                'url'        => '^(http|https)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                'ftp'        => '^(ftp|ftps)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                'datefr'    => '^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$',
                'datefr2'    => '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$',
                'dateus'    => '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$',
                'dateus2'    => '^[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$',
                'year'        => '^[0-9]{4}$',
                'H_M'        => '^[0-2][0-9]:[0-5][0-9]$',
                'H_M_S'        => '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$',
                'H_M2'        => '^[0-9]{1,2}:[0-9]{1,2}$',
                'H_M_S2'    => '^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$',
            );
Malheureusement celà ne marche pas bien de ce fait si vous avec des masques pour preg_match je suis preneur
Au passe le code avec preg_mach:

function FormCTRL($Word, $Type, $Min, $Max, $Necessary, $Message_necessary, $Message_error){
    $Array_Reg = array(
                'alpha'     => '^[[:alpha:]]',
                'digit'        => '^[[:digit:]]',
                'alnum'        => '^[[:alnum:]]',
                'alpha_all'    => '^[a-zA-Zéèêëàâîïôûùüçñ]',
                'alnum_all'    => '^[A-Za-z0-9,\' éèêëàâîïôûùüçñ-]',
                'login'        => '^[a-zA-Z][a-zA-Z0-9]',
                //'mail'        => '(^[:alnum:]+)([_|\.|-]*)([:alnum:]+)@([:alnum:]+)([_|\.|-]*)([[:alnum:]]+)\.([:alnum:]|-|_|\.)*)',
                //'mail'        => '(^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)@(^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)\.([a-zA-Z0-9]))',
                'name' => '(^[ a-zA-Zéèêôâîûäüöëï]+([\'-]?[ a-zA-Zéèêôâîûäüöëïçñ]+)',
                'mail'        => '((^[a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)@([a-zA-Z0-9]+)([_|\.|-]*)([a-zA-Z0-9]+)\.[a-zA-Z]{2,3}$)',
                //'mail'=> '^([^@\s<&>]+)@(?:([-a-z0-9]+)\.)+([a-z]{2,})$',
                //'mail'        => '(^[[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)@([[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)\.([[:alnum:]]|-|_|\.)*',
               
                //preg_match("/^[\ a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i", $email)) {
                //'mail'        => '^[[:alnum:]]+([_|\.|-]*)([[:alnum:]]+)@([[:alnum:]]+)([_|\.|-]*)([[:alnum:]]+)\.([[:alpha:]]{3}$)',
                'url'        => '^(http|https)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                'ftp'        => '^(ftp|ftps)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]',
                'datefr'    => '^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$',
                'datefr2'    => '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$',
                'dateus'    => '^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$',
                'dateus2'    => '^[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}$',
                'year'        => '^[0-9]{4}$',
                'H_M'        => '^[0-2][0-9]:[0-5][0-9]$',
                'H_M_S'        => '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$',
                'H_M2'        => '^[0-9]{1,2}:[0-9]{1,2}$',
                'H_M_S2'    => '^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$',
            );
   
    $message = false;
    if(is_array($Array_Reg)){
            foreach( $Array_Reg as $key => $value ){
                if($Type == $key){
                    $Word = trim($Word);
                    if (!$Word && $Necessary){
                        $message = $Message_necessary;
                    }elseif($Word){
                        if($Min && $Max){
                            //if(!ereg($value."{".$Minimum.",".$Maximum."}$", $Word)): $message = $Message_erreur; endif;
                            if(!preg_match('/'.$value.'{'.$Min.','.$Max.'}$/', $Word)): $message = $Message_error; endif;
                        }elseif($Min && !$Max){
                            //if(!ereg($value."{".$Minimum.",}$", $Word)): $message = $Message_erreur; endif;
                            if(!preg_match('/'.$value.'{'.$Min.',}$/', $Word)): $message = $Message_error; endif;
                        }else{
                            //if(!ereg($value, $Word)) : $message = $Message_erreur; endif;
                            if(!preg_match('/'.$value.'/', $Word)): $message = $Message_error; endif;
                        }
                    }   
                }
            }
               
       
    }   
    return $message;   
}

1 réponse

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 11:49
Pourrais-tu séparer tous tes patterns afin de savoir ceux dont tu à besoin ? Honnetement tout ton paté de code, ca donne pas trop envie de tout lire ;)

D'apres ce que j'ai vu, j'aurai quelques remarques :
Tu met url puis ftp, ftp est considéré comme une url, fait attention

Pour les dates, tu met datefr et dateus, mais il n'y à pas que celle là.
Perso je te conseille d'utiliser des classes, avec une classe date_us, une classe date_fr, et tu fait une interface iDate qui spécifie les méthodes dont tu aura besoin (check, compare, etc).

Comme ca si demain tu doit faire une date date_marsien bah tu ne sera pas bloqué ! :)

Pour l'analyse de valeurs (_get, _post, etc), tu peux jeter un oeil à ma source, elle pourra peut-etre te renseigner sur certains patterns :

http://www.phpcs.com/codes/PHP5-CLASSE-VERIFICATION-FORMULAIRE_44864.aspx

Courage en tout cas :)
0
Rejoignez-nous