|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Myka Étudiant Inscription : juillet 2006 Messages : 254 ![]() |
Bonjour,
Aujourd'hui on m'a posé une bonne question sur comment utiliser le preg_match correctement pour valider un nom sur un site web (username). Moi j'aimerai faire un code qui détecte si la chaine contient : - Au moins 3 caractères - Suivis de - caractères de a à z (insensible à la casse) OU - des nombres de de 1 à 9 Ça m'a pas l'air bien compliqué mais pourtant... ça fonctionne pas. Voici le code ci dessous. Code :
On dirait que c'est bon il vérifie si il y a trois caractères, mais ensuite tous les autres caractères passent. Je ne comprends pas Et puis j'avais testé : quelle est la différence entre : ([a-z]) et [a-z] ? Moi je n'en voit aucune, pourtant l'un renvoie 1 et l'autre 0 malgré la même chaine passée en paramètre! Les () sont nécessaires pour l'évaluation avec preg_replace ? Quelqu'un pourrait m'aider? |
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Bonsoir,
que voulez-vous comme restriction? Expliquez plus clairement, en donnant plusieurs exemple de ce que vous voulez et ne voulez pas. Cordialement, DaRiaN. |
|
|
00
|
|
|
#3 |
|
Membre expérimenté
![]() Inscription : août 2004 Messages : 584 ![]() |
Effectivement, il renvoie une correspondance, car il manque le début et fin de ligne.
Soit :
__________________
"Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin. "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
et aussi parce que ([a-z]|[1-9])* veut dire "des chiffres, des lettres ou rien du tout". Le + serait préférable à l'étoile dans ce cas...
|
|
|
00
|
|
|
#5 | |||
|
Membre actif
![]() Myka Étudiant Inscription : juillet 2006 Messages : 254 ![]() |
Citation:
C'est exact, en fait je viens de comprendre, c'est que comme je n'avais pas fixé le début ni la fin, ben il trouvait un caractère qui correspondait et pouvait s'arrêter avec une correspondance. Voici mon code modifié : Code :
Y'a-t-il une solution plus optimisée? Parce que j'utilise ([a-z]|[1-9]) quatre fois dans l'expression. Peut-on faire mieux ? |
|||
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Y a toujours moyen de faire plus court, mais plus optimisé, aucune idée :
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Les [classes de caractères] sont plus efficaces que les (alter|natives).
Sinon, attention, [:alnum:] prendra le 0. J'adapterais ainsi : ou pour ignorer la casse. |
|
|
00
|
|
|
#8 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Oula... je devais être fatigué hier, désolé. Par contre dans ce cas, adieu les caractères accentués (je ne sais pas s'il en a besoin) et tout ça pour un zéro qu'on pourrait facilement retrouver avec un strpos.
Allez, une dernière possibilité? Pour l'autre cas de figure, peut-être : Code :
$pattern = '`^(([[:alpha:]]|[1-9]){4,})$`'; |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
ou même :
Code :
$pattern = '`^([[:alpha:]1-9]{4,})$`';
|
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Je ne sais pas, je travaille rarement avec les REGEX. Il faudra surement rajouter ce genre de code en début de script, tout dépendra du serveur et de sa configuration.
Code :
setlocale(LC_ALL, 'fr_FR.ISO-8859-1'); |
|
|
00
|
|
|
#11 |
|
Membre actif
![]() Myka Étudiant Inscription : juillet 2006 Messages : 254 ![]() |
Ok parfait sauf qu'on m'a pas expliqué la différence avec et sans () pourquoi j'obtenais des résultats différents. Bof en tous cas c'est pas si grave, peut être que j'avais fait une autre erreur.
En tous cas, merci à tous, votre aide a été précieuse |
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
T'avais dû faire une autre erreur
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com