Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 18h56   #1
Futur Membre du Club
 
Homme
Analyste Programmeur
Inscription : juin 2007
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Analyste Programmeur

Informations forums :
Inscription : juin 2007
Messages : 38
Points : 17
Points : 17
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
Kurapika-shinji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 20h23   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
Bonjour,
j'ai vu ca :
-> Propriétés des caractères Unicode ;
-> Unicode Regular Expressions.

[Edit] et je viens de trouver :
Citation:
$regex_text = "#^\p{L}(\p{L}+[- ']?)*\p{L}$#ui";
Code :
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 !
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 23h52   #3
Futur Membre du Club
 
Homme
Analyste Programmeur
Inscription : juin 2007
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Analyste Programmeur

Informations forums :
Inscription : juin 2007
Messages : 38
Points : 17
Points : 17
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...
Kurapika-shinji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 09h13   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
Il suffit sûrement d'ajouter sur la chaine récupérée :
-> stripslashes() Supprime les antislashs d'une chaîne
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 19h58   #5
Futur Membre du Club
 
Homme
Analyste Programmeur
Inscription : juin 2007
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Analyste Programmeur

Informations forums :
Inscription : juin 2007
Messages : 38
Points : 17
Points : 17
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? )
Kurapika-shinji est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h56.


 
 
 
 
Partenaires

Hébergement Web