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

rikounet75 Messages postés 1 Statut Membre -  
 Utilisateur anonyme -
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

  1. Utilisateur anonyme
     
    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
    1. rikounet75
       
      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
    2. Utilisateur anonyme
       
      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
  2. rikounet75
     
    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
    1. Utilisateur anonyme
       
      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
    2. rikounet75
       
      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
    3. Utilisateur anonyme
       
      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