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 :

Probleme dans ma regex : Compilation failed [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut Probleme dans ma regex : Compilation failed
    Bonjour j'ai un petit probleme dans ma regex qui m'affiche l'erreur :
    Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 20 in admin_lang.php on line 101
    Je dois autoriser uniquement les lettres, chiffres et caractreres . - _ / et \

    la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('/^[A-Za-z0-9-_.\/\\]*$/', $text)
    Pourtant cette même regex fonctionne en javascript lorsque je fait :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    /^[A-Za-z0-9-_.\/\\]*$/.test(text)
    une idée ?

    Merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Il faut utiliser comme délimiteur du pattern un caractère qui n'est pas dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^[A-Za-z0-9-_.\/\\]*$#', $text)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Je viens d'essayer avec # mais il m'affiche la même erreur

  4. #4
    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
    Il manque un échappement sur \ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^[A-Za-z0-9-_./\\\]*$#', $text)

  5. #5
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    ça fonctionne merci mais j'ai du mal à comprendre :

    avec [A-Za-z0-9-_.\/\\] il semble que PHP échappe le \ dans la chaine de caractere ce qui a pour conséquence que la chaine renvoyé au regex est [A-Za-z0-9-_./\] -> problème échappement du ] = pas bon

    Pour ça c'est bon mais dans le cas du

    [A-Za-z0-9-_.\/\\\], PHP est censé renvoyé également [A-Za-z0-9-_./\] non ?
    car dans \\\] le dernier \ échappe le ] normalement donc logiquement cela ne devrait pas fonctionner et on devrait plutot mettre [A-Za-z0-9-_.\/\\\\].

    A moins que PHP n'échape que certains caractere et que dans le cas de '\]' il n'y a pas échappement ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Alors après test, le fait de placer un \ devant le ] l'échappe et du coup il n'est plus reconnu comme faisant partie du pattern (enfin je suppose)
    Enfin, bref ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#^[A-Za-z0-9-_.\\\/]*$#', $text)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonjour,

    A priori,
    dans une liste de caractères interdits (ou autorisés),
    hormis pour le - (sauf lorsqu'il est en dernier), le délimiteur choisi et le ],
    il n'est pas nécessaire d'utiliser la barre oblique inversée,
    pour échapper les autres caractères
    .
    (A confirmer par les experts des expressions régulières)

    Dans ton exemple,
    je dirais que
    la dernière barre oblique inversée échappe le crochet fermant,
    la liste n'étant donc pas fermée,
    PHP te renvoie une erreur.

    Voici ce que j'ai testé et qui, me semble-t-il, pourrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $text ="Aa0-./\\";
    echo $text."<br/>";
    echo preg_match('#^[A-Za-z0-9_./\-]*$#', stripslashes($text));
    Fred

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

Discussions similaires

  1. Probleme dans un Makefile compilant des sous dossiers
    Par student_ dans le forum Débuter
    Réponses: 0
    Dernier message: 18/01/2010, 17h27
  2. [MYSQL] Probleme lors de la compilation
    Par Nasky dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 24/02/2004, 17h04
  3. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51
  4. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47
  5. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14

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