PHP5.3 semble ne pas aimer du tout les ereg. Je suis donc en train de
tenter de remplacer mes ereg par des preg_match(_all ?).
Le but est de vérifier qu'un mot de passe contient entre 5 et 8 caractères,
et seulement des caractères alphanumériques.
J'avais :
if (!ereg("[A-Za-z0-9]{5,8}",$mdp))
... (message d'erreur)
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp))
... (message d'erreur)
Et naturellement cela ne fonctionne pas, aucun mot de passe ne semble
accepté.
Je me doute bien que ma regexp est mal écrite, mais je ne suis pas capable
de trouver ce qui ne va pas...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Bonjour,
Le 01/11/2012 20:23, Pascale a écrit :
PHP5.3 semble ne pas aimer du tout les ereg. Je suis donc en train de tenter de remplacer mes ereg par des preg_match(_all ?). Le but est de vérifier qu'un mot de passe contient entre 5 et 8 caractères, et seulement des caractères alphanumériques.
J'avais : if (!ereg("[A-Za-z0-9]{5,8}",$mdp)) ... (message d'erreur)
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères alphanumériques, pas qu'il n'y a que ces caractères-là.
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre qu'il n'y a pas autre chose, par exemple une espace ou un saut de ligne (n) ?
Et naturellement cela ne fonctionne pas, aucun mot de passe ne semble accepté.
Est-ce que ça marche en retirant le ^ et le $ ? Inversement, est-ce que l'ereg continue à fonctionner en les ajoutant ?
Je me doute bien que ma regexp est mal écrite, mais je ne suis pas capable de trouver ce qui ne va pas...
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour voir.
Cordialement, -- Olivier Miakinen
Bonjour,
Le 01/11/2012 20:23, Pascale a écrit :
PHP5.3 semble ne pas aimer du tout les ereg. Je suis donc en train de
tenter de remplacer mes ereg par des preg_match(_all ?).
Le but est de vérifier qu'un mot de passe contient entre 5 et 8 caractères,
et seulement des caractères alphanumériques.
J'avais :
if (!ereg("[A-Za-z0-9]{5,8}",$mdp))
... (message d'erreur)
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie
juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères
alphanumériques, pas qu'il n'y a que ces caractères-là.
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp))
... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une
seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient
rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre
qu'il n'y a pas autre chose, par exemple une espace ou un saut de
ligne (n) ?
Et naturellement cela ne fonctionne pas, aucun mot de passe ne semble
accepté.
Est-ce que ça marche en retirant le ^ et le $ ? Inversement, est-ce
que l'ereg continue à fonctionner en les ajoutant ?
Je me doute bien que ma regexp est mal écrite, mais je ne suis pas capable
de trouver ce qui ne va pas...
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant
qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour
voir.
PHP5.3 semble ne pas aimer du tout les ereg. Je suis donc en train de tenter de remplacer mes ereg par des preg_match(_all ?). Le but est de vérifier qu'un mot de passe contient entre 5 et 8 caractères, et seulement des caractères alphanumériques.
J'avais : if (!ereg("[A-Za-z0-9]{5,8}",$mdp)) ... (message d'erreur)
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères alphanumériques, pas qu'il n'y a que ces caractères-là.
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre qu'il n'y a pas autre chose, par exemple une espace ou un saut de ligne (n) ?
Et naturellement cela ne fonctionne pas, aucun mot de passe ne semble accepté.
Est-ce que ça marche en retirant le ^ et le $ ? Inversement, est-ce que l'ereg continue à fonctionner en les ajoutant ?
Je me doute bien que ma regexp est mal écrite, mais je ne suis pas capable de trouver ce qui ne va pas...
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour voir.
Cordialement, -- Olivier Miakinen
Pascale
Bonjour Olivier (et les zôtres aussi !),
Olivier Miakinen <om+ écrivait news:k6ukgq$1hdv$:
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères alphanumériques, pas qu'il n'y a que ces caractères-là.
Oui, elle laissait passer à peu près tout et n'importe quoi (maintenant je comprends pourquoi...).
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre qu'il n'y a pas autre chose, par exemple une espace ou un saut de ligne (n) ?
Normalement il n'y a rien d'autre : le mot de passe est passé par un formulaire (méthode post), et avant d'être vérifié, je fais dessus un trim, puis un strip_tags. Je viens donc de remplacer preg_match_all par preg_match, et je ne peux toujours rentrer aucun mot de passe, pas même un bête aaaaaa.
Est-ce que ça marche en retirant le ^ et le $ ?
Non. preg_match ne fonctionne pas non plus, que ce soit avec ou sans ^ et $.
Inversement, est-ce que l'ereg continue à fonctionner en les ajoutant ?
Oui, et elle semble fonctionner correctement, filtrant les caractères non alpha-numériques et acceptant ceux-ci. Je sais que c'est une syntaxe « dépréciée », donc j'aurais bien voulu passer à preg_match, mais je n'y parviens pas !
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour voir.
Donc j'arrive à faire quelque chose qui marche avec l'ancienne syntaxe ereg (améliorée), mais pas avec preg_match. En résumé : !ereg('^[A-Za-z0-9]{5,8}$',$mdp) fonctionne mais
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie
juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères
alphanumériques, pas qu'il n'y a que ces caractères-là.
Oui, elle laissait passer à peu près tout et n'importe quoi (maintenant je
comprends pourquoi...).
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp))
... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une
seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient
rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre
qu'il n'y a pas autre chose, par exemple une espace ou un saut de
ligne (n) ?
Normalement il n'y a rien d'autre : le mot de passe est passé par un
formulaire (méthode post), et avant d'être vérifié, je fais dessus un trim,
puis un strip_tags.
Je viens donc de remplacer preg_match_all par preg_match, et je ne peux
toujours rentrer aucun mot de passe, pas même un bête aaaaaa.
Est-ce que ça marche en retirant le ^ et le $ ?
Non. preg_match ne fonctionne pas non plus, que ce soit avec ou sans ^ et
$.
Inversement, est-ce que l'ereg continue à fonctionner en les ajoutant ?
Oui, et elle semble fonctionner correctement, filtrant les caractères non
alpha-numériques et acceptant ceux-ci. Je sais que c'est une syntaxe
« dépréciée », donc j'aurais bien voulu passer à preg_match, mais je n'y
parviens pas !
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant
qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour
voir.
Donc j'arrive à faire quelque chose qui marche avec l'ancienne syntaxe ereg
(améliorée), mais pas avec preg_match.
En résumé :
!ereg('^[A-Za-z0-9]{5,8}$',$mdp) fonctionne mais
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que :
!preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Cette regexp n'étant pas ancrée au début et à la fin, elle vérifie juste que la chaîne *contient* une sous-chaîne d'au moins 5 caractères alphanumériques, pas qu'il n'y a que ces caractères-là.
Oui, elle laissait passer à peu près tout et n'importe quoi (maintenant je comprends pourquoi...).
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Ici, tu l'as ancrée (^ et $), du coup tu es sûre de ne trouver qu'une seule occurrence au maximum, et donc un preg_match suffirait.
Cela dit, ça devrait fonctionner si vraiment la chaîne ne contient rien d'autre que les 5 à 8 caractères alphanumériques. Es-tu sûre qu'il n'y a pas autre chose, par exemple une espace ou un saut de ligne (n) ?
Normalement il n'y a rien d'autre : le mot de passe est passé par un formulaire (méthode post), et avant d'être vérifié, je fais dessus un trim, puis un strip_tags. Je viens donc de remplacer preg_match_all par preg_match, et je ne peux toujours rentrer aucun mot de passe, pas même un bête aaaaaa.
Est-ce que ça marche en retirant le ^ et le $ ?
Non. preg_match ne fonctionne pas non plus, que ce soit avec ou sans ^ et $.
Inversement, est-ce que l'ereg continue à fonctionner en les ajoutant ?
Oui, et elle semble fonctionner correctement, filtrant les caractères non alpha-numériques et acceptant ceux-ci. Je sais que c'est une syntaxe « dépréciée », donc j'aurais bien voulu passer à preg_match, mais je n'y parviens pas !
Elle n'est pas forcément mal écrite, c'était peut-être celle d'avant qui n'était pas suffisamment stricte. Fais les essais ci-dessus pour voir.
Donc j'arrive à faire quelque chose qui marche avec l'ancienne syntaxe ereg (améliorée), mais pas avec preg_match. En résumé : !ereg('^[A-Za-z0-9]{5,8}$',$mdp) fonctionne mais
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Quelle est cette étrange diablerie ?
-- Pascale http://www.la-grille-verte.net
Olivier Miakinen
Le 02/11/2012 12:41, Pascale a écrit :
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Comme déjà dit, ceci devrait fonctionner (quoique je conseillerais plutôt preg_match que preg_match_all).
Mais :
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Quelle est cette étrange diablerie ?
Essaye donc avec : if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
Cordialement, -- Olivier Miakinen
Le 02/11/2012 12:41, Pascale a écrit :
Je tente :
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp))
... (message d'erreur)
Comme déjà dit, ceci devrait fonctionner (quoique je conseillerais
plutôt preg_match que preg_match_all).
Mais :
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que :
!preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Quelle est cette étrange diablerie ?
Essaye donc avec :
if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
if (!preg_match_all("/^[a-zA-Z0-9]{5,8}$/",$mdp)) ... (message d'erreur)
Comme déjà dit, ceci devrait fonctionner (quoique je conseillerais plutôt preg_match que preg_match_all).
Mais :
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Quelle est cette étrange diablerie ?
Essaye donc avec : if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
Cordialement, -- Olivier Miakinen
Pascale
Olivier Miakinen <om+ écrivait news:k70t3r$2udn$:
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Ou : comment je réussis à faire une bêtise en tentant d'en ôter une autre (j'ai remplacé effectivement les " par des ' sans slashes... Si c'est pas du talent à l'état pur, ça...)
Quelle est cette étrange diablerie ?
Essaye donc avec : if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
Et ça naturellement, ça marche !
Je te remercie pour ton aide efficace... et ta patience !
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que :
!preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Ou : comment je réussis à faire une bêtise en tentant d'en ôter une autre
(j'ai remplacé effectivement les " par des ' sans slashes... Si c'est pas
du talent à l'état pur, ça...)
Quelle est cette étrange diablerie ?
Essaye donc avec :
if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
Et ça naturellement, ça marche !
Je te remercie pour ton aide efficace... et ta patience !
!preg_match('^[a-zA-Z0-9]{5,8}$',$mdp) ne fonctionne pas, pas plus que : !preg_match_all('[a-zA-Z0-9]{5,8}',$mdp).
Là c'est normal que ça ne fonctionne pas, il manque les slashs (/).
Ou : comment je réussis à faire une bêtise en tentant d'en ôter une autre (j'ai remplacé effectivement les " par des ' sans slashes... Si c'est pas du talent à l'état pur, ça...)
Quelle est cette étrange diablerie ?
Essaye donc avec : if (!preg_match('/^[a-zA-Z0-9]{5,8}$/', $mdp))
Et ça naturellement, ça marche !
Je te remercie pour ton aide efficace... et ta patience !