Ereg = preg_match .... j'ai un petit probleme de script

Fermé
rikounet75 Messages postés 1 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 16 août 2013 - 16 août 2013 à 03:02
 Utilisateur anonyme - 16 août 2013 à 16:30
Bonjour



j'ai un souci de script, qui pourrait m'aider ?

sur mon site y a un formulaire pour poster des messages

mais des erreurs persistent . je suis sûr que c'est trois fois rien...pour les connaisseurs

pour ma part je suis hyper débutant, voici les erreurs ci-dessous



je vous remercie par avance

Rikou




Nom:
Email:
Message:



Warning: preg_match() [function.preg-match]: Unknown modifier '[' in /homez.744/melime/www/js/sendmail.php on line 41

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in /homez.744/melime/www/js/sendmail.php on line 49

Warning: preg_match() [function.preg-match]: Unknown modifier '[' in /homez.744/melime/www/js/sendmail.php on line 57





je vous fais la copie du php de la ligne 41 à la ligne 57 ( là où il y a les erreurs )





} elseif (preg_match( "[ ][{}()*+?.\\^$|]", $_REQUEST['name'] ) ) {
$pass = 1;
$alert .= "<li>" . $alertname . "</li>";
}
if ( empty($_REQUEST['email']) ) {
$pass = 1;
$alert .= "<li>" . $emptyemail . "</li>";
$alert .= "<script>jQuery(\"#email\").addClass(\"error\");</script>";
} elseif (preg_match("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $_REQUEST['email']) ) {
$pass = 1;
$alert .= "<li>" . $alertemail . "</li>";
}
if ( empty($_REQUEST['message']) ) {
$pass = 1;
$alert .= "<li>" . $emptymessage . "</li>";
$alert .= "<script>jQuery(\"#message\").addClass(\"error\");</script>";
} elseif (preg_match( "[ ][{}()*+\\^$|]", $_REQUEST['message'] ) ) {

2 réponses

Utilisateur anonyme
16 août 2013 à 10:33
oy !

Je ne peux pas tester mais à prioris je dirai qu'il faudrai que tu echappe ton énumération :
Tu peux énumérer des caractères entre "[" et "]", c'est ce que tu veux faire. Mais par exemple pour le caractère "]", il ne correspond pas à la fin de ton énumération mais il EST un caractère énuméré. Il faut l'echapper : "\]". Il faut utiliser l'echappement pour chaque caractères étant interprétée pour une expression régulière pour justement qu'il ne soit vu QUE comme un caractère.
de tête je sais que
] et [ => délimiteur d'énumération
( et ) => délémiteur de ce que tu veux récupérer
* => n fois un caractère*
+ => 1 fois un caractère
? => pas le cactère suivant
. => n'importe quel caractère
^ => fin de chaine
$ => début de chaine
| => OU


par contre tu as bien échappé le "\" en "\\" ^^
0
Bjr

j'essaie de comprendre
quand on "ouvre" il faut " fermer " ( la traduction de l'echappé )
et le caractere [ ] seront pris en compte en tant que delimiteur si on ne met pas / devant et // apres

je te dis que je suis totalement debutant

mais dans le c as que j'ai exposé ....je pige que dalle...j'ai essayé de mettre / avant après etc..toutes les combinaisons...tjs des messages d'erreur...

en tout cas je te remercie d'avoir pris (de prendre )sur ton temps pour me répondre

A+ E
0
Utilisateur anonyme
16 août 2013 à 11:35
le caractère d'echappement est l'anti-slash, soit :


C'est, à dire que si tu veux récupérer [ ou ] la regex sera :

[\]\[]


Du peu que j'ai pu regarder, je dirai que tu veux vérifier qu'un email est correctement formatté. Pour cela tu peux écrire celle-ci :

([a-zA-Z0-9._-].*?@[a-zA-Z0-9._-])


ce qui est entre ( et ) sera le résultat.

ta regex est :
"^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$"


je pense que tu peux tester ;
([\._a-z0-9-]*?@[\.a-z0-9-]*?\.[a-z]{2,3})


qui te retournera l'email s'il est valide.
Ajouter les délimiteur ^ et $ dans ton cas n'est pas nécessaire car tu test toute la chaine, et cette chaine représente l'email (perso je les utilise quasiment jamais).

comme tu peux le constater, j'ai retiré le "." et je l'ai remplacé par "\." => "." seul désigne n'importe quel caractère. "\." (point echappé) désigne le caractère "point".
0
re
je ris mais c'est nerveux...
je te remercie tout d'abord ..vraiment

quand je remplace ma regex par celle que tu me proposes de tester , dreamweaver m'indique immédiatement qu'il y a des erreurs de syntaxe...

pourrait on correspondre par email ?

comme cela je t'envoie tout le script php ?
ou ce serait abuser de ta bonté ?

Cordialement
0
Utilisateur anonyme
16 août 2013 à 14:42
ca ne serai pas abusé mais je ne pourrai pas t'aider ^^ (je suis au taff, je n'ai d accès aux mail et je t'avous qu'une fois chez moi, je fais fis de comment ca marche ^^).

mais tu peux essayer tes regex ici :
https://www.myregextester.com/index.php

tu coche php et tu peux tester tes regex (saisie du haut) sur le texte que tu veux (saisie du bas) : ca affichera les résultats + la syntaxe php .

par exemple, la regex que je t'ai donné te renverra :
PHP Code Example: 
<?php
$sourcestring="your source string";
preg_match_all('/([\._a-z0-9-]*?@[\.a-z0-9-]*?\.[a-z]{2,3})/',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
 


tu remplace $sourcestring par $_REQUEST['email'] et ca devrai le faire.

Ce code affiche les résultats, je ne pense pas que ce soit ce qui t'intéresse, mais déjà tu peux tester ta regex ^^.

PS : ce n'est pas parceque dreamweaver te dis que c'est pas bon que ca ne l'est vraiment pas ^^. Le mieux est de tester et voir directement le résultat ;)
0
ok

donc j'ai remplace ma regex par la tienne
([\._a-z0-9-]*?@[\.a-z0-9-]*?\.[a-z]{2,3})

maintenant dans le formulaire
quand on le remplit pour envoyer un message

le message se fige
donc n'est pas envoyé

mais par contre pas de message d'erreur
comme ct le cas auparavant .....

rappel: avant quand on envoyait
un message à partir du formulaire

ceci s'affichait; mais le message était quand même envoyé

Warning: preg_match() [function.preg-match]:
Unknown modifier '[' in /homez.744/melime/www/js/sendmail.php on line 41

Warning: preg_match() [function.preg-match]:
No ending delimiter '^' found in /homez.744/melime/www/js/sendmail.php on line 49

Warning: preg_match() [function.preg-match]:
Unknown modifier '[' in /homez.744/melime/www/js/sendmail.php on line 57
0
Utilisateur anonyme
16 août 2013 à 16:30
c'est donc que la regex est passé à prioris.

Pour la suite il faudrai que je vois ce que tu fais, envoie moi en mp et j'essayerai ce week de regarder.

pour être plus proche de ce que faisais avant :

([\._a-z0-9-]*?)@([\.a-z0-9-]*?)\.([a-z]{2,3})


(si sais à quoi sert les parenthèses, c'est bon ;))
0