PHP & Regex [Réglé]
Les caractères accentués
Discussions Générales
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
Je suis de retour avec un problème au niveau des expressions régulières. J'ai toujours eu de la difficulté avec les Regex, mais il me semble que celles-ci n'ont jamais empêchées d'accepter les caractères accentués. Il semble que ça me bloque aujourd'hui.
Ma regex devrait accepter les caractères alpha, le tiret, le caractère underscore et toutes les lettres accentuées généralement utilisées dans des prénoms, des noms de villes etc...
Mon motif de regex est donc ceci:
$motif = '`^[[:alpha:]-_]{4,30}$`';
Je croyais que la classe pré-définie [:alpha:] comprenait n'importe quelle lettre, mais il semble bien qu'elle ne comprend pas les caractères accentués. Si je fais :
[code]<?php
$str = 'Québec';
$motif = '`^[[:alpha:]-_]{4,30}$`';
if (preg_match($motif, $str)) {
echo 'okay';
}
else {
echo 'pas okay';
}
[/code]
Ceci me donnera Pas okay.
Toutefois, si $str = 'Que-_bec'; il prendra bien les autres caractères alpha ainsi que le tiret et l'underscore. Je dois vous avouer qu'à chaque fois que je lis de la documentation sur les expressions régulières... je ne capte vraiment pas ce que j'ai lu.
Une idée?
Forensic
Édité par Forensic Le 28/10/2007 à 23h29
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
:alpha correspond aux alphanumériques c'est-à-dire non accentués.
En fait le comportement de ta regex est normal, par contre je ne l'aurais pas écrite comme ceci au niveau du tiret. En effet tu es obligé d'échapper le tiret pour ne pas qu'il considère un intervalle (dans ce cas ça n'aurait pas de sens) donc au lieu de l'échapper on peut plus simplement le mettre à la fin comme ceci :
[code]<?php
$motif = '`^[[:alpha:]_-]{4,30}$`';
?> [/code]
Maintenant si tu veux autoriser les accents pour des raisons d'optimisation je pense qu'il serait plus judicieux de se demander ce que tu ne veux pas plutôt, ça serait peut-être plus simple.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
Forensic Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Forensic
- Inscrit le : 18/12/2006
Merci pour me donner cette approche. Je crois que je vais adopter les caractères que je ne veux pas autoriser.
Bonne journée,
Forensic
Chercher sur le forum - /Consulter la Documentation - Consulter la Foire aux Questions (FAQ)
Dire bonjour et merci, c'est toujours apprécié et pensez à mettre vos messages en Réglé!
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie