Avec un tel masque donc, lyon passe, mais pas besançon on est d'accord ?.Code : Tout sélectionner
function testenom($chaine){ if(ereg("^[A-Za-z' -]+$",$chaine)) return true; else return false; }
Avec un tel masque donc, lyon passe, mais pas besançon on est d'accord ?.Code : Tout sélectionner
function testenom($chaine){ if(ereg("^[A-Za-z' -]+$",$chaine)) return true; else return false; }
Je viens de tester mais j'ai un autre souci. Je ne suis pas trop sûr de la syntaxe et j'ai remplacé mon ereg() par preg_match("#[A-Za-z' -]+#",$chaine).utilise preg_match() pour faire ce que tu veux....
On est d'accord en pratique. Je pensais d'abord que le "ç" était équivalent à "c" et donc que le test se vérifierait. Comme en pratique ce n'est pas le cas, je cherche un moyen de tester tous les caractères spéciaux possibles dans un nom propre sans problème.Avec un tel masque donc, lyon passe, mais pas besançon on est d'accord ?.Code : Tout sélectionner
function testenom($chaine){ if(ereg("^[A-Za-z' -]+$",$chaine)) return true; else return false; }
Je plussois ce qui a déjà été dit, si tu veux autoriser le caractère "-" dans ton masque, il doit obligatoirement être placé à la fin du masque.EDIT : par contre, en modifiant le masque comme suit : "^[A-Za-z' -à]+$", "Besançon" passe aussi et je ne suis pas bien sûr de comprendre pourquoi.
Merci pour le plussoiement, je le répète depuis mon premier post en lui demandant de déplacer son "à" ^^Je plussois ce qui a déjà été dit, si tu veux autoriser le caractère "-" dans ton masque, il doit obligatoirement être placé à la fin du masque.
En effet, le "moins" a également pour effet de déterminer un interval : a-z, A-Z... C'est ce qu'il fait s'il n'est pas le dernier caractère du masque.
Mais, euh, j'avais mal fait mes tests.ui demandant de déplacer son "à" ^^
D'après mes tests, l'interval des classes fonctionne bien sur la table ASCII mais pas sur la tale ASCII étendue et le " -à" renvoie à peu près n'importe quoi. Donc plutôt que d'essayer de faire un interval sur les caractères accentués pourquoi ne pas lister ceux que tu souhaites autoriser.Sinon, je pensais bien évidemment à la table ASCII (et plus probablement à la version ANSI), mais si les intervalles sont bien définis par rapport à elle, je ne m'explique pas comment mon intervalle " -à" peut inclure le c cédille et les e accentués (qui se trouvent après le "à" dans la table ASCII étendue, quelle que soit sa version).
Tu te mélanges les pinceaux...évidemment que "bob5" renvoie vrai puisque tu testes si "bob5" contient des lettres et c'est vrai!Je viens de tester mais j'ai un autre souci. Je ne suis pas trop sûr de la syntaxe et j'ai remplacé mon ereg() par preg_match("#[A-Za-z' -]+#",$chaine).
Seulement, si je rajoute des chiffres après le premier caractère, l'expression se vérifie et je ne comprends pas bien pourquoi...
- "bob" renvoie vrai (c'est bon)
- "5" renvoie faux (c'est toujours bon)
- "bob5" renvoie vrai (ça ne va plus)
Et je m'aperçois que des caractères spéciaux tels que "$" sont acceptés par mon expression (aussi bien avec ereg() qu'avec preg_match()).
if(preg_match("#[^A-Za-z' -]+#",$chaine)) echo 'chaine ne convient pas';else echo 'chaine ok';
//ou
if(!preg_match("#[^A-Za-z' -]+#",$chaine)) echo 'chaine ok';else echo 'chaine ne convient pas';
//et pour rajouter des caractères accentués en minuscules, mieux vaut les lister
if(!preg_match("#[^A-Za-z'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ -]+#",$chaine)) echo 'chaine ok';else echo 'chaine ne convient pas';
//Si tu acceptes les majuscules et minuscules accentuées ou non
if(!preg_match("#[^a-z'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ -]+#i",$chaine)) echo 'chaine ok';else echo 'chaine ne convient pas';
//et pour éviter de renvoyer ok sur une chaine vide
if(!preg_match("#[^a-z'àáâãäåçèéêëìíîïðòóôõöùúûüýÿ -]+#i",$chaine) && trim($chaine) != '') echo 'chaine ok';else echo 'chaine ne convient pas';
Comme ça tu as une expression compréhensible qui ne devrait pas trop de donner de mauvaise surprise.
// on force la locale à C
echo '<pre>', setlocale(LC_CTYPE, ''), "\r\n";
echo (int) preg_match('#\w#', 'é'), "\r\n";
echo (int) preg_match('#[a-z]#', 'é'), "\r\n";
echo (int) preg_match('#[[:alpha:]]#', 'é'), "\r\n\r\n";
// mise de la locale à fr_FR
echo setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1'), "\r\n";
echo (int) preg_match('#\w#', 'é'), "\r\n";
echo (int) preg_match('#[a-z]#', 'é'), "\r\n";
echo (int) preg_match('#[[:alpha:]]#', 'é'), "\r\n";
Retournera:
Code : Tout sélectionner
C
0
0
0
fr_FR.ISO-8859-1
1
0
1
Code : Tout sélectionner
$ locale -a