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 :

Problème preg_match appostrophe-accent-ç [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Par défaut Problème preg_match appostrophe-accent-ç
    Bonjour !


    J'ai un gros problème avec un preg_match, et j'ai beau tester des solutions proposées sur divers sites, impossible de résoudre mon soucis.


    Je m'explique : je dois vérifier des noms/prenoms, a la française.

    Donc autoriser accents, ç, ', -, etc...

    Soucis : dès qu'y'a un accent, ca déconne. Parfois j'peux en mettre un au milieu, mais pas 2, et jamais a la fin !

    Coté apostrophe n'en parlons pas : ca marche pas, et au regardement de la page, ca me remplace aujourd'hui par ajourd\


    j'ai testé ca :

    preg_match("#^[a-zA-Z-é'èçàù^ûêëæäîïöœ-]*[a-zéèçàù^ûâêëæäîïöœ]+$#",$prenom)

    preg_match( '`^[a-zA-Z]+(?:[\ \-\.\'][a-zA-Z]+)*$`',$prenom)


    et tant d'autres : impossible de faire avancer le shmilblik


    Si quelqu'un peut m'aider, ce serait super

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai vu ca :
    -> Propriétés des caractères Unicode ;
    -> Unicode Regular Expressions.

    [Edit] et je viens de trouver :
    $regex_text = "#^\p{L}(\p{L}+[- ']?)*\p{L}$#ui";
    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
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" dir="ltr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<title>Vérification Nom, Prénom</title>
    </head>
    <body>
     
    <?php
    $chaine = '';
    if($_POST) {
    // ------------------------
    // recuperation :
    $chaine = htmlspecialchars(trim(@$_POST['chaine']), ENT_NOQUOTES, 'UTF-8');
    // ------------------------
    // => on veut ici au moins 2 caractères, et les caractères : tiret, espace, apostrophe
    // on veut aussi les caractères accentués (voir -> http://www.php.net/manual/fr/regexp.reference.unicode.php)
    $regex_text = "#^\p{L}(\p{L}+[- ']?)*\p{L}$#ui";
    // exemple : Jérôme-Gaëtan du Château près d'Alençon
    // ------------------------
    // regex (explication)
    // \p{L} : [un alpha]
    // (\p{L}+[- ']?)* : ( au moins [un alpha] éventuellement [un tiret ou une espace ou une apostrophe] ) un nombre indéfini de fois
    // \p{L} : [un alpha]
    // ------------------------
    // => si on accepte 1 seul caractere :
    //$regex_text = "#^(\p{L}+[- ']?)*\p{L}$#ui";
    // ------------------------
    if(preg_match($regex_text, $chaine)) {
    	echo $chaine.' : OK !';
    } else {
    	echo $chaine.' : PAS ok !';
    }
    // ------------------------
    }
    ?>
    	<form method="post" action="#">
    	<fieldset>
    		<p><input type="text" name="chaine" size="40" value="<?php echo htmlspecialchars($chaine, ENT_QUOTES, 'UTF-8'); ?>"/></p>
    		<p><input type="submit" value="OK"/></p>
    	</fieldset>
    	</form>
     
    </body>
    </html>
    J : PAS ok ! (-> 1 seul caractère)
    Jérôme- : PAS ok ! (-> tiret à la fin)
    'Jérôme : PAS ok ! (-> apostrophe au début)
    Jérome62 : PAS ok ! (-> chiffres non-autorisés)
    Jérôme-"Gaëtan" : PAS ok ! (-> caractères non-autorisés)
    Jérôme-Ga<ë>tan : PAS ok ! (-> caractères non-autorisés)
    Jérôme- Gaëtan : PAS ok ! (-> tiret ET espace côte-à-côte)

    Jé : OK !
    Jérôme-Gaëtan : OK !
    Jérôme-Gaëtan du Château près d'Alençon : OK !
    Dernière modification par Invité ; 14/09/2011 à 21h34.

  3. #3
    Membre averti
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Par défaut
    merci beaucoup, c'est (presque) parfait !


    coté accent et caractère spéciaux c'est nickel, mais l'apostrophe déconne toujours...


    après le post, la chaine devient : Jérôme-Gaëtan du Château près d\'Alençon et donc ne passe pas le preg_match (et même s'il le passait parce qu'on rajouterait un \ dans le nom est c'est pas idéal )

    j'ai pourtant bien ajouté les "htmlspecialchars($chaine, ENT_QUOTES, 'UTF-8');" que je ne connaissais pas, et vérifié que ma page php ainsi que le tpl qui y fait appel soit en utf-8 également...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il suffit sûrement d'ajouter sur la chaine récupérée :
    -> stripslashes() Supprime les antislashs d'une chaîne
    Dernière modification par Invité ; 16/09/2011 à 00h49.

  5. #5
    Membre averti
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Par défaut
    Ca marche impec'

    Et non, le champs doit aller dans la bdd, mais il y est pas encore. C'est sur un formulaire d'inscription ^^



    Sujet résolu, merci beaucoup !!!


    (un mystère reste entier : pourquoi un sujet si important et classique que le controle de la saisie, c'est si dur de trouver des solutions fonctionnelles? )

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

Discussions similaires

  1. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  2. Problème Sockets et Accents
    Par tetedemul dans le forum C++
    Réponses: 2
    Dernier message: 13/12/2005, 15h54
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

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