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 :

Accents et expression régulière


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Accents et expression régulière
    Bonjour,

    Je suis étudiant en informatique et je dois développer un site Web en Php et autres.
    Fin bon, je souhaitais tester un champ Nom pour être sûr qu'il possède que des caractères alphabétique. Donc je me suis dis que je pouvais utiliser une Expression Régulière, mais du coup j'ai un petit problème je pense que c'est peu être du à l'encodage mais je suis pas sûr! Car lorsque je rentre un nom avec un accent type 'félicien' il ne match pas, pourtant j'ai essayer plusieurs regex :

    '#^[a-zA-Zéèçàê]*$#' ou sans les accents avec l'option u et rien ne marche !

    Je précise également que j'ai essayer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_CTYPE, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    sur mon serveur et rien n'y fait d'ailleurs quand je rentre félicien dans le champ il encode le "é" en UTF-8 ! CAD é à la validation du formulaire.

    Donc si quelqu 'un a la solution car je m'arrache les cheveux blancs.

    Est ce dans le code le voici :

    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
     
    if ($nomInt <> ""){
     
    		if (strlen($nomInt)< 3 || strlen($nomInt)> 50)
    		{
    			echo "<label class='erreur'> Désolé mais votre nom doit comporter au minimum 3 caractères et maximum 50 caractères .</label><br>";
    			$erreur = true;
    		}elseif (!preg_match('#^[a-zA-Zéèçàê]*$#',$nomInt))
    		{
    			echo"<label class='erreur'> Vous ne pouvez utiliser que des caractère \" ALPHABETIQUE \" dans le champ <strong> nom </strong></label><br>";
    			$erreur = true;	
    		}else{
     
    			echo "ok";
    		}
    	}

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    va retourner TRUE pour é, là où
    va retourner FALSE
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Les accents ont toujours tort !
    J'ai bien analysé ce que tu m'a dit mais je remarque toujours que dans mon test
    il ne valide toujours pas les accents c'est peut être normale mais j'ai fait tellement de test que du coup je suis perdu !

    Car si je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (preg_match('#^[[:alpha:]]*$#u' ,$nomInt)){
        echo " OK ";
    }else{
       echo " Erreur de saisie ";
    }
    lorsque je tape dans le champ:

    1. aurelien -> OK
    2. aurelien22 -> Erreur de saisie
    3. aurélien -> Erreur de saisie

    Donc pourquoi il n'accepte pas les champs accentués ?

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Numérique: 0-9
    Alphabétique: a-zA-Z
    Alphanumérique:a-zA-Z0-9

    Pas étonnant que le second donne faux puisque tu filtres les caractères alphabétiques.

    Comme je ne vois pas #(*UTF8)^[[:alnum:]]*$# dans ton test, je ne peux rien dire.

    Si ça coïnce toujours, sans doute te faut-il utiliser utf8_encode()
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Problème résolu !
    Bon grâce Flodelarab qui m'a permis de me mettre sur la voie mon problème est résolu !

    Mais je ne sais pas si ma méthode est très catholique mais bon j'ai essayé tellement chose.
    Car je sais pas pourquoi mais les syntaxes "#^[a-zA-Z]+$#" OU "#(*UTF8)^[[:alpha:]]+$#" ou encore "#^[a-zA-Zéèçàê]+$#" ne fonctionnait pas et ce peu importe dans quel sens je tournais le preg_match(). Il y avait toujours l'une des conditions qui n'étaient pas acceptées! Soit la chaîne sans accents était acceptée mais celle avec accents était refusée ou c'était le contraire.

    J'ai essayé aussi de convertir avec utf8_encode() mais comme toujours ma saisie était refusée quand la chaîne comportait des accents, je rappel que mon but était de n'accepter que les caractères "alphabétiques" y compris les éèçàê et rien d'autre!

    Donc j'y viens, ma solution est toute simple et démontre bien que cela vient bien d'un problème d'encodage (donc si quelqu'un connaît la raison je suis preneur ) donc la voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (preg_match("#^[a-zA-Z&eacute;&ccedil;&euml;]+$#", $nomInt))
    les caractères ASC2 et aussi bizzare que cela puisse paraître je n'ai même pas besoin de déclarer tous les caractères accentués pour que ceux - ci fonctionnent ! Alors qui peut m'expliquer la raison ? Avant que je clos ce topic!

    Merci

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bonjour,

    vu que tu dois vérifier des noms écrits avec l'alphabet latin, tu peux rencontrer des caractères accentués et notamment des caractères accentués qui ne sont pas forcément propres à la langue française, par exemple:
    Bohuslav Martinů
    Julián Orbón
    Launy Grøndahl

    Du coup il peut être utile de taper large concernant la classe de caractères à utiliser.

    [a-zA-ZÀ-ÖØ-öø-ÿœŒ] comprend en plus des lettres "normales" toutes les lettres du supplément latin-1 plus les e dans l'o qui étrangement ne font pas partie de cette portion.

    Bref, pour venir à bout de ta vérification, tu peux utiliser ce pattern:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (preg_match('~^[a-zA-ZÀ-ÖØ-öø-ÿœŒ]+$~u', $nomInt)) {
        echo ' OK ';
    } else {
        echo ' Erreur de saisie ';
    }
    (ps: on ne met pas d'entité html dans les classes de caractères)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut J'ai toujours le même problème !
    Merci d'avoir répondu mais j'ai toujours le même problème et pour l'instant il y a que les caractère html qui marche !

    La j'avoue que je ne comprend rien à cette histoire.

Discussions similaires

  1. [RegExp] Expression régulière acceptant les accents
    Par yocef55 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/01/2014, 18h39
  2. Réponses: 4
    Dernier message: 04/10/2010, 00h23
  3. Accents et expressions régulières
    Par otocyon dans le forum Ruby
    Réponses: 1
    Dernier message: 19/05/2009, 12h06
  4. Expression régulière sans accent
    Par hacksi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2008, 10h50
  5. Accents et expressions régulières
    Par qdqdfqfdqdxcwcrzsdfw dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/03/2007, 12h24

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