IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

preg_match : format de données [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut preg_match : format de données
    Bonjour à tous ,

    j'aimerais vérifier qu'une information est saisie sous la forme:
    x°y'z" et j'ai utiliser ceci:
    preg_match (/(\d+)°(\d+)\'(\d+)\"/, $latitude), mais ça signale une erreur de syntaxe:
    Parse error: parse error, unexpected '/', expecting ')'

    une idée. merçi d'avance pour votre aide

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par guestCam
    Bonjour à tous ,

    j'aimerais vérifier qu'une information est saisie sous la forme:
    x°y'z" et j'ai utiliser ceci:
    preg_match (/(\d+)°(\d+)\'(\d+)\"/, $latitude), mais ça signale une erreur de syntaxe:
    Parse error: parse error, unexpected '/', expecting ')'

    une idée. merçi d'avance pour votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match ("/(\d+)°(\d+)\'(\d+)\"/", $latitude)

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    je viens d'ajouter les 2 guillemets comme tu m'as dit, donc j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match ("/(\d+)°(\d+)\'(\d+)\"/", $latitude)
    ,

    l'erreur actuel est:

    Parse error: parse error, unexpected '\"', expecting ',' or ';'

    Là je ne vois pas l'erreur, une idée?

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    La syntaxe ça passe, mais quand je saisie les données correctes, la vérification est fausse.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    Quand je saisie une bonne donnée et que j'essaie d'afficher à l'écran ça me donne par exemple ceci avec un echo :
    2°22\'3\" alors que j'ai saisie 2°22'3".

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    L'apostrophe figurant dans le masque n'a pas besoin d'être échappée a priori.

    Si vos données proviennent d'un formulaire, les antislashs supplémentaires sont surement le fruit de la fonctionnalité magic_quotes_gpc auquel cas la fonction stripslashes sera nécessaire avant sur ces mêmes données.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    salut julp,
    la fonctionne stripslashes me permet d'afficher la chaine correctement(merçi pour l'info).
    mon problème maintenant est que preg_match retourne faux même quand je saisie une chaine correcte(genre 45°125'12").
    Est-ce que mon pattern
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/(\d+)°(\d+)\'(\d+)\"/"
    aurait des problèmes?

  8. #8
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par guestCam
    salut julp,
    la fonctionne stripslashes me permet d'afficher la chaine correctement(merçi pour l'info).
    mon problème maintenant est que preg_match retourne faux même quand je saisie une chaine correcte(genre 45°125'12").
    Est-ce que mon pattern
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/(\d+)°(\d+)\'(\d+)\"/"
    aurait des problèmes?
    Comme l'a dit julp il faut surement retirer le backslash avant la quote simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "/(\d+)°(\d+)'(\d+)\"/"

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    j'ai enlevé l'anti-slash sur l'apostrophe, mais jusque là lorsque je saisie 23°45'356", ça me renvoie toujours false.

  10. #10
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par guestCam
    j'ai enlevé l'anti-slash sur l'apostrophe, mais jusque là lorsque je saisie 23°45'356", ça me renvoie toujours false.
    Moi ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $latitude = "23°45'356\"";
    var_dump(preg_match ("/([0-9]+)°([0-9]+)'([0-9]+)\"/", $latitude));
    ?>
    me renvoie bien 1

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    si j'initialise ma chaine avec une constante comme tu dis, ça fonctionne, mais cette chaine, je dois la récupérer avec $latitude = $_POST[$field],
    et c'est là où ça ne fonctionne pas quand j'appelle preg_match sur $latitude.

    En appelant la fonctionne stripslashes et en faisant echo j'ai par exemple 25°45'123". je sèche

  12. #12
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    remplaces "echo" par var_dump($_POST[$field]) pour bien voir le contenu de ta chaine (y compris les espaces, les caractères html etc).

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    j'obtiens ceci en faisant var_dump($_POST[$field]):

    string(13) "25°45\'123\""

  14. #14
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Citation Envoyé par guestCam
    j'obtiens ceci en faisant var_dump($_POST[$field]):

    string(13) "25°45\'123\""
    voila donc tu obtiens un \ avant la quote et avant la double quote ! il faut donc que tu enlèves ces backslahes superflus avant d'utiliser preg_match:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $latitude = stripslashes($_POST[$field]);

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    c'est ce que j'avais fait comme je t'expliquais:
    puisque j'avais dit que j'obtenais 25°45'123" en appliquant stripslahes; ce qui est différent de la constante 25°45'123\"(qui "matches" bien le pattern).

    donc stripslahes($_POST[$field]) me renvoie 25°45'123" qui ne "matches" pas le pattern.

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    A ce stade, donnez nous votre code (un code minimal) et nous testerons. Ce sera plus simple je pense.

  17. #17
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    Quand j'affiche le code source via le browser j'obtiens:

    longitude = 25°45'123"

    Je pense que c'est le caractère spécial qui pose problème.
    comment le retirer?

  18. #18
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    voiçi une partie de mon code, regarder juste $local_longitude.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    if($saveMote){
      #save the new mote information into the database.
     
      if(!$conn){
        die("Could not connect to database server!<br />");
      } else {
        $query = "SELECT * FROM $table WHERE miid=$miid";
        $result = pg_query($query);
     
        $meta = pg_meta_data($conn, $table);
     
        $query = "UPDATE $table SET";
        if (is_array($meta)){
          // for every field
          $count = 0;
          foreach(array_keys($meta) as $field){
    	echo "$field,\n ";
     
    	//take the longitude_dms and latitude_dms for check purpose before querying(awal_start)
     
    	if (strcmp($field,"longitude_dms")==0){
    	  $local_longitude=stripslashes($_POST[$field]);
    	  var_dump($_POST[$field]);
    	  //echo "local_longitude = ".stripslashes($local_longitude);//add
    	  echo " ".strcmp($field,"longitude_dms")." ";//add
    	 }
    	else if (strcmp($field,"longitude_dms")==0){
    	  $local_latitude = $_POST[$field];
    	  echo " ".strcmp($field,"latitude_dms")." ";//add
    	}
     
    	//end take (awal_end)
     
    	$type = $meta[$field]["type"];
    	if(($type=="int4") || ($type=="numeric")){
    	  if ($_POST[$field]){
    	    if($count != 0){
    	      $query .= ",";
    	    }
    	    $query .= " $field=".$_POST[$field];
     
    	  }
    	} else if($type == "varchar"){
    	  if($count != 0){
    	    $query .= ",";
    	  }
    	  $query .= " $field='".$_POST[$field]."'";
    	} else if($type == "timestamp") {
    	  if($count != 0){
    	    $query .= ",";
    	  }
    	  if($_POST[$field] != ""){
    	    $query .= " $field='".$_POST[$field]."'";
    	  } else {
    	    $query .= " $field=now()";
    	  }
    	} 
    	$count += 1;
          }
        }
     
     
     
        $query .= " WHERE miid=$miid";
      echo $query;
      echo "local longitude = ".$local_longitude;
     
      //verify the pattern matching before querying (awal_start)
     
      #$pattern ="/(\d+)°(\d+)\'(\d+)\"/"; 
     
      //$local_longitude = stripslashes($local_longitude);//remove anti-
      //$local_longitude = "25°33'23\"";
      //$local_longitude = stripslashes($local_longitude);
     
     
      echo "valeur de retour de preg_match : ".preg_match("/([0-9]+)°([0-9]+)'([0-9]+)\"/",$local_longitude);
     
      if (preg_match("/([0-9]+)°([0-9]+)'([0-9]+)\"/",$local_longitude)){ //correct format was entered
        $res = pg_query($query);
     
        // show the new mote data
        showmotes($table, $conn, $clusterid);
      }
      else
        {
          echo "latitude and longitude must have the following format x°y'z";
        }
    il ne fonctionne à cause de local_longitude qui contient les données au mauvais format.

  19. #19
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Par défaut
    j'ai du utilisé la fonction utf8_decode sur ma variable pour résoudre le problème.
    Merçi pour vos interventions qui m'ont bcp aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. format de données
    Par Blowih dans le forum OpenGL
    Réponses: 1
    Dernier message: 14/03/2005, 18h22
  2. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 14h24
  3. Format de données en sortie d'une procédure stockée
    Par Martin Sylvie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/02/2005, 13h02
  4. pB format de données
    Par calamity_jane dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 12/10/2004, 09h33
  5. Réponses: 4
    Dernier message: 04/12/2003, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo