opérateur de comparaison

opérateur de comparaison - PHP - Programmation

Marsh Posté le 01-12-2005 à 22:12:16    

Bonsoir,  
 
J'ai un petit souci avec l'opérateur  ||  dans une fonction. Voici ce que je fais :
 
 

Code :
  1. <?php
  2.        function expr($string)
  3.        {
  4.         $patun = '/^, /';
  5.         $patdeux = '/de\s*$/';
  6.      
  7.         if (!preg_match($patun, $string)||($patdeux, $string)){
  8.            return ucfirst($string);
  9.          exit;
  10.         }


 
Je veux donc tester que $string ne commence pas par un virgule ni ne finit par le mot 'de'. Avant de faire les preg_replace, je teste le $string disant que si le string ne commence pas par un virgule ET ne finit pas par le mot 'de', qu'on retourne $string...
 
mais j'ai une erreur :
 
Parse error: parse error, unexpected ',' in /home/thiebo/public_html/messources1/actes/expr_reg.php on line 7
 
ligne 7 étant la ligne qui contient if (!preg_match($patun, $string)||($patdeux, $string)){
 
Quelqu'un voit où je fais fausse route, et comment réparer ??
 
Merci !

Reply

Marsh Posté le 01-12-2005 à 22:12:16   

Reply

Marsh Posté le 01-12-2005 à 22:51:47    

thiebo12375 a écrit :

Bonsoir,  
 
J'ai un petit souci avec l'opérateur  ||  dans une fonction. Voici ce que je fais :
 
 

Code :
  1. <?php
  2.        function expr($string)
  3.        {
  4.         $patun = '/^, /';
  5.         $patdeux = '/de\s*$/';
  6.      
  7.         if (!preg_match($patun, $string)||($patdeux, $string)){
  8.            return ucfirst($string);
  9.          exit;
  10.         }


 
Je veux donc tester que $string ne commence pas par un virgule ni ne finit par le mot 'de'. Avant de faire les preg_replace, je teste le $string disant que si le string ne commence pas par un virgule ET ne finit pas par le mot 'de', qu'on retourne $string...
 
mais j'ai une erreur :
 
Parse error: parse error, unexpected ',' in /home/thiebo/public_html/messources1/actes/expr_reg.php on line 7
 
ligne 7 étant la ligne qui contient if (!preg_match($patun, $string)||($patdeux, $string)){
 
Quelqu'un voit où je fais fausse route, et comment réparer ??
 
Merci !


Je ne sais pas si c'est la cause de ton prob, mais la ligne 7, je la trouve douteuse :D
Essaye comme ça:

Code :
  1. if (!preg_match($patun, $string) || !preg_match($patdeux, $string))


Message édité par onizuka_sensei le 01-12-2005 à 22:52:30
Reply

Marsh Posté le 01-12-2005 à 22:54:07    

...
 
Une fonction prend comme paramètres ce qui se trouve entre ses parenthèses, pas le contenu des 36000 suivantes. Et un opérateur logique sert à "calculer" le resultat de 2 booléens, pas à relier diverses choses.
 
Puis, vu ce que tu veux vérifier, c'est normalement faisable avec un seul masque, pas la peine de faire plusieurs preg_match (oui, c'est ça le problème, tu as "juste" oublier le preg_match entre le || et le ( :D) pour ça.

Reply

Marsh Posté le 02-12-2005 à 07:40:51    

naceroth a écrit :

...
 
Une fonction prend comme paramètres ce qui se trouve entre ses parenthèses, pas le contenu des 36000 suivantes. Et un opérateur logique sert à "calculer" le resultat de 2 booléens, pas à relier diverses choses.
 
Puis, vu ce que tu veux vérifier, c'est normalement faisable avec un seul masque, pas la peine de faire plusieurs preg_match (oui, c'est ça le problème, tu as "juste" oublier le preg_match entre le || et le ( :D) pour ça.


 
 
Merci pour vos réponses, mais aie aie aie, je ne suis pas sûr d'avoir pigé... La solution proposée par onizuka_sensei n'a pas marchée non plus. D'ailleurs, la fonction marche très bien sans le test de l'expression régulière :
 
maintenant la fonction est comme ceci :
 

Code :
  1. <?php
  2.        function expr($string)
  3.        {
  4.         $patun = '/^, /';
  5.         $patdeux = '/de\s*$/';
  6.         $string = preg_replace($patun,'',$string);
  7.         $string = preg_replace($patdeux,'',$string);
  8.         return ucfirst($string);
  9.        }
  10.      ?>


 
j'imagine que je perds en efficacité sur les $string qui ne commencent par par un virgule et qui ne finissent pas par le mot 'de' mais... ça marche quand même. qu'en pensez-vous ? Mon if (preg_match ....) est-il nécessaire ?

Reply

Marsh Posté le 02-12-2005 à 10:27:39    

Si tu avais voulu faire une seule pattern de test  

Code :
  1. /(^,)|(de\s*$)/


 
Maintenant ta nouvelle fonction ne fait plus du tout la même chose, elle remplace carrement tes patterns par rien. Tu peux quand même le faire en une seule fois

Code :
  1. function expr(string){
  2.   return preg_replace('/^(,|)(.*?)(de\s*|)$/', $2, $string);
  3. }


 
edit: manquait un bout :o


Message édité par anapajari le 02-12-2005 à 10:31:07
Reply

Marsh Posté le 02-12-2005 à 10:46:24    

pfiou !!! Merci beaucoup. J'ai beaucoup à appendre encore en matière d'expressions régulières....
A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed