Page 1 sur 1

probleme pour valider une chaine

Posté : 24 févr. 2006, 13:00
par logone
Salut,

J'ai besoin de valider une chaine voici le principe

$logvalidate='login'.'[0-9]{3}'.'ext';
if (($login==$logvalidate) && ($password=='pass')){
Je voudrais en faite avoir 2 parties fixes et une partie variable
par ex.

login333ext ou login 123ext puisse fonctionner
je supose que ma syntaxe est incorrect mais je ne vois vraiment pas comment faire.

Merci de votre aide

Posté : 24 févr. 2006, 13:26
par Cyrano
utilise preg_match et une expression régulière PCRE:
<?php
$loginvalidate = "#(?:login)\s?\d{3}(?:ext)#i";
if (preg_match($loginvalidate, $login) && ($password=='pass'))
{
    //...
}
?>

Posté : 24 févr. 2006, 13:34
par Hermès
il y a un intérêt à faire (?: à la place de ( quand on se soucie pas de faire de la capture ? A partir du moment où on ne récupère pas les captures dans un tableau ça ne devrait rien changer mais, ça se trouve ça accélère encore plus la commande de lui préciser que non, non, on veut pas faire de capture...

Posté : 24 févr. 2006, 13:47
par Cyrano
En faisant le test sur le testeur REGEX de Ripat pour comparer les deux, le résultat est le suivant:
Avec parenthèses non capturantes:
Motif#1 preg_match
#(?:login)\s?\d{3}(?:ext)#

Durée: 3.2901763916016E-05 sec. (100 %)

login123ext
Avec parenthèses capturantes:
Motif#2 preg_match
#(login)\s?\d{3}(ext)#

Durée: 3.504753112793E-05 sec. (107 %)

login123ext
C'est vraiment mineur comme différences, surtout que c'est du niveau de la microseconde, mais les parenthèses non capturantes rendre le traitement un poil plus rapides.

Posté : 24 févr. 2006, 14:36
par titerm
Ca semble douteux comme calcul...

Résultats Timing sur 200 itérations ou sur 1 itérations

Code : Tout sélectionner

Motif#1 preg_match_all #(login)\s?\d{3}(ext)# Durée: 0.0031609535217285 sec. (106 %)

Code : Tout sélectionner

Motif#2 preg_match_all #(login)\s?\d{3}(ext)# Durée: 0.0029830932617188 sec. (100 %)
La première est toujours plus lente...

Ceci étant dis, je ne vois pas l'interet de capturer des chaines fixes dans le cas present...

Résultats Timing sur 200 itérations et je met ma proposition en 1 pour etre pénalisé...

Code : Tout sélectionner

Motif#1 preg_match_all #login\s?\d{3}ext# Durée: 0.0019588470458984 sec. (100 %)

Code : Tout sélectionner

Motif#2 preg_match_all #(login)\s?\d{3}(ext)# Durée: 0.0031490325927734 sec. (161 %)

Posté : 24 févr. 2006, 15:06
par logone
c'est impec ca fonctionne

Merci :)

Je ne connaissais pas cette fonction :lol: