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 :

regex majuscule avec accent [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 26
    Points
    26
    Par défaut regex majuscule avec accent
    bonsoir à tous
    j'utilise cette expression regulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if(!preg_match_all('`(sch[eéÉ]ma)`isU', $contenu_sans_balises , $out) )
    	{	$blacklist = '1';		}
    Seulement si ma variable "$contenu_sans_balises" contient un "É" (E majuscule avec accent), la regex me renvoie "FALSE" bien que ce caractère soit spécifié dans ma fonction.

    EDIT: je précise pour les puristes qui me feront remarquer que j'ai mis un ! devant ma fonction que je souhaite que $blacklist = '1' si le mot schéma n'est pas dans mon contenu

    Auriez vous une idée de ce qui ne va pas dans mon code?

    merci à tous.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    peut être qu'il faudrait que j'ajoute l'option u (minuscule)?
    quelqu'un peut confirmer ou m'aiguiller ?

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    un petit morceau de code que j'aime bien et qui pourrait aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $string = htmlentities($string);
    $string = preg_replace('#&(.)(uml);#', '$1e', $string);
    $string = preg_replace('#&(.)(acute|cedil|circ|ring|tilde|uml|grave);#', '$1', $string);
    Cela permet tout simplement de... supprimer les accents de la chaine string d'une maniere que je trouve tres elegante !

    Tu n'a plus qu'a faire ta regex sans avoir a gerer les accents par la suite.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    très bien , malgrès que ça ne resolve pas mon problème par la méthode du preg_match_all, ça fonctionnera (3 fonction de plus pour faire ce que devrait faire une seule).
    si quelqu'un à un élément de solution pour la méthode que j'utilise, je suis preneur. Pourquoi mon E accentué n'est pas reconnu par ma regex?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Pour répondre plus spécifiquement a ton probleme, c'est a cause des format de caracteres utilisés.

    Le É qui est dans ton fichier correspond a l'encodage du fichier php le contenant et le É que tu compares dans ta chaine correspond a l'encodage utilisé par le navigateur, eventuellement transformé entre temps par PHP ou d'autres intervenant dans un autre encodage... bref, c'est le bordel ;o)

    Une solution est d'attendre PHP6 qui uniformisera tout en utf-8
    Une autre solution est de chercher a maitriser de bout en bout le type d'encodage utilisé (mais c'est super chaud)
    Une derniere solution consiste a faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!preg_match_all('`(sch[e|è|È]ma)`isU', htmlentities($contenu_sans_balises) , $out) ) {
    	    $blacklist = '1';		
    }
    là tu n'a qu'une seule regex et il y a des chances que ca fonctionne (meme si ce n'est pas aussi générique que la précédente solution ;o)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 26
    Points
    26
    Par défaut
    je comprend. merci pour vos réponses.
    Ce que je n'avais pas compris c'est la transformation é... en &eacute... selon les cas.
    C'etait effectivement ça qui me posait problème.

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

Discussions similaires

  1. [RegExp] RegEx avec accents, espaces et caractères de séparation
    Par General_Batton dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/03/2018, 17h31
  2. Regex Case insensitive avec accent
    Par LittleBean dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2011, 14h47
  3. Probleme avec accent majuscule
    Par cerede2000 dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/02/2007, 14h26
  4. mettre en majuscule avec accent
    Par nicerico dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 08h21
  5. [Regex] Vérifier un texte avec accents
    Par supermanu dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/10/2005, 15h29

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