Page 1 sur 1

aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 28 févr. 2020, 11:21
par thuillier-charmet
le bout de code en 5.3 mais qui ne passe pas en 7.3 est :
114 	if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
115 	'@'.
116 	'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
117 	'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
118 	$f_7))
119         {
120 	$erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
121 		$errf_7=1;
122 	}
et donne le message d'erreur
appel à la fonction non définie ereg () dans /htdocs/c1.inc.php:114 Trace de pile: # 0 {main}
en changeant le fonction ereg par preg_match comme vu sur l'excellent tuto https://www.php.net/manual/fr/function.preg-match.php
114   if(!preg_match('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
115   '@'.
116   '[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
117   '[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
118   $f_7))
119   {
120   $erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
121   $errf_7=1;
122   }
l'erreur se transforme en :
preg_match(): Unknown modifier '_' in /htdocs/c1.inc.php on line 118
alors que
$f_7
est bien définis en ligne 99 et il n'y a pas d'erreur ? :
	
93        // Formatage des entrées
94        $f_2=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_2)));
95	$f_3=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_3)));
96	$f_4=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_4)));
97	$f_5=trim(preg_replace("[^0-9+]", "", $f_5));
98	$f_6=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_6)));
99	$f_7=strip_tags(trim($f_7));
100	$f_8=trim(preg_replace("[^0-9\ +]", "", $f_8));
en indiquant en jaune que
Le champ « Email » est vide ou incomplet.
alors que le mail est inchangé :?:

autant dire que mes compétances php s'arrête la ! serait ce une histoire de utf8 ? :?:

merci !
(petite suggestion faire incrémenter un numérotage automatique lorsque on met du code php serait peut être une facilité de lecture surtout lorsque le code est long )

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 28 févr. 2020, 11:46
par Saian
Salut, à priori le pattern doit être entouré d'un caractère délimiteur de ton choix. Généralement on choisit un caractère qui n'est pas présent dans l'expression. Sinon il faut échapper le caractère dans l'expression.

Petit exemple pour être clair, disons que tu veux tous les mots, l'expression sera \w+ et le preg_match('/\w+/', $subject); Ici le délimiteur est le /

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 28 févr. 2020, 12:52
par thuillier-charmet
Salut, à priori le pattern doit être entouré d'un caractère délimiteur de ton choix. Généralement on choisit un caractère qui n'est pas présent dans l'expression. Sinon il faut échapper le caractère dans l'expression.

Petit exemple pour être clair, disons que tu veux tous les mots, l'expression sera \w+ et le preg_match('/\w+/', $subject); Ici le délimiteur est le /
que est l'utilité du point d'exclamation devant preg match :
!preg_match
j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 28 févr. 2020, 13:01
par Saian
que est l'utilité du point d'exclamation devant preg match
C'est ce qu'on appelle un not. En fait ça inverse simplement la valeur du retour. Un true devient false et un false devient true.

j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???
Je pense qu'il s'agit plutôt d'une différence entre POSIX et PCRE. ereg utilisant des expressions POSIX et preg des expressions PCRE.
POSIX ne nécessite pas de délimiteur mais PCRE si car PCRE permet l'ajout d'un modifier après le délimiteur de fin.

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 10:35
par thuillier-charmet
que est l'utilité du point d'exclamation devant preg match
C'est ce qu'on appelle un not. En fait ça inverse simplement la valeur du retour. Un true devient false et un false devient true.

j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???
Je pense qu'il s'agit plutôt d'une différence entre POSIX et PCRE. ereg utilisant des expressions POSIX et preg des expressions PCRE.
POSIX ne nécessite pas de délimiteur mais PCRE si car PCRE permet l'ajout d'un modifier après le délimiteur de fin.
ah ! merci pour l'éclairage je comprends mieux avec cette logique explicité.

le mieux que j'ai obtenue aprés plus d'une heure de "titillement" est :
113  }else{
114		if(!preg_match('~/ ^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+  /~'.
115		'~/ @ /~'.
116		'~/ [-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.  /~'.
117		'~/ [-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$ /~' ,
118  	    '~/$f_7 /~'))
        {
qui me retourne une erreur
Warning: preg_match(): Unknown modifier ']' in /htdocs/c1.inc.php on line 118
:?: #-o :?:
si je mets en ligne 118
  $f_7 ))
cela donne la même erreur
et si j'emploie une syntaxe complexe comme vu sur l'excellent tuto https://www.php.net/manual/fr/language.types.string.php en ligne 118
{$f_7}))
cela mer retourne l'erreur
Parse error: syntax error, unexpected '{', expecting ')' in /htdocs/c1.inc.php on line 118
de même pour
    }else{
114		if(!preg_match('/\w+/'.
115	    '/@/'.
116		'/\w+/'.
117		'/\w+/' ,
118	     $f_7))
qui me retourne
Warning: preg_match(): Unknown modifier '/' in /htdocs/c1.inc.php on line 118
:?: #-o

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 13:03
par Saian
Bah en fait, le pattern tu l'as mis sur plusieurs ligne en faisant de la concaténation de chaines (.). Le délimiteur doit être présent une fois au début et une fois à la fin du pattern et c'est un unique caractère, pas deux.
'/pattern/' si tu fais '/patt/'.'/ern/' ça donne /patt//ern/ et c'est pas bon.

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 13:18
par thuillier-charmet
Bah en fait, le pattern tu l'as mis sur plusieurs ligne en faisant de la concaténation de chaines (.). Le délimiteur doit être présent une fois au début et une fois à la fin du pattern et c'est un unique caractère, pas deux.
'/pattern/' si tu fais '/patt/'.'/ern/' ça donne /patt//ern/ et c'est pas bon.
si je fais
113    }else{
114		if(!preg_match('/[email protected]+.w+/' , $f_7))
j'ai le message d'erreur " le champ email est vide ou incomplet" :?: #-o

idem si je fais
113}else{
114		if(!preg_match('/\D.@.\D.\D/' , $f_7))
 115 {
116		$erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
117			$errf_7=1;
comme vu avec l'excellent tuto sur les cacartéres : https://www.php.net/manual/fr/regexp.re ... escape.php

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 13:23
par Saian
Bah le pattern ne doit pas être bon. Tu peux le tester ici https://regexr.com/ regarde bien la cheatsheet.
Déjà w+ ça veut juste dire 1 à n w et le . c'est n'importe quel caractère.
'/\w+@\w+\.\w+/' serait déjà mieux mais ça fonctionnera pas avec tous les emails.

EDIT en fait les règles pour les emails sont assez complexes. Y a des fonctions toutes prêtes pour les valider comme filter_var avec FILTER_VALIDATE_EMAIL. Pour valider un email par regex, tu dois pouvoir trouver des regex tous prêts, beaucoup plus complexes que la simple expression au dessus.

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 13:48
par thuillier-charmet
Bah le pattern ne doit pas être bon. Tu peux le tester ici https://regexr.com/ regarde bien la cheatsheet.
Déjà w+ ça veut juste dire 1 à n w et le . c'est n'importe quel caractère.
'/\w+@\w+\.\w+/' serait déjà mieux mais ça fonctionnera pas avec tous les emails.

EDIT en fait les règles pour les emails sont assez complexes. Y a des fonctions toutes prêtes pour les valider comme filter_var avec FILTER_VALIDATE_EMAIL. Pour valider un email par regex, tu dois pouvoir trouver des regex tous prêts, beaucoup plus complexes que la simple expression au dessus.
yeah ! Saian !
c'est la bonne formule "sacré bon sang de bon soir"
: :lol: avec
  
113  }else{
114		if(!preg_match('/\w+@\w+\.\w+/' , $f_7))
et mon mail est bien partis ! =D>

pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 16:34
par Saian
pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?
Tu mets l'expression dans la zone expression, le texte que tu veux tester dans la zone text et tu vas voir en live le résultat de l'expression.

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 17:57
par thuillier-charmet
pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?
Tu mets l'expression dans la zone expression, le texte que tu veux tester dans la zone text et tu vas voir en live le résultat de l'expression.
merci ,j'ai compris la logique de la chose

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 18:17
par Saian
Tu peux utiliser le modifier u pour prendre en compte les caractères accentués. /\w+@\w+\.\w+/u

Re: aide : dead with 7.3 mais en vie avec 5.3 !

Posté : 29 févr. 2020, 18:20
par thuillier-charmet
Tu peux utiliser le modifier u pour prendre en compte les caractères accentués. /\w+@\w+\.\w+/u
oui merci du bon suivis :lol: =D>