À mon travail, il y a un intégrateur qui montre beaucoup d'intérêt pour la programmation et qui me demande régulièrement conseil, question d'en apprendre un peu sur le tas. Je perçois positivement sa curiosité, mais je sais qu'il finira tôt ou tard par préférer la programmation et les défis qui y sont rattachés (est-ce que je me trompe ?).
Il a voulu relever un petit défi et il a fait une tentative pour écrire un bout de code. Après révision avec lui, je lui ai montré ce truc pour lui faciliter la vie. En fait, c'est directement relié à la validation d'une variable représentant un URL, où il voulait s'assurer que la donnée saisie par l'utilisateur débutait par "http://". Il avait écrit quelque chose en utilisant la fonction strstr() et je lui ai fait remarqué que si le client entrait ceci, ça trouverait quand même la chaîne recherchée.
$var1 = 'http://www.google.com/';Même si je lui avais suggéré d'utiliser une regex, ça aurait peut-être été trop avancé car il commence à peine à apprendre le PHP, c'est beaucoup lui en demander.
$var2 = 'www.google.com/http://';
echo strstr($var1, 'http://');
echo strstr($var2, 'http://');
$pattern = '/^http:\/\/.*/';En attendant, pour qu'il puisse poursuivre son projet sans devoir faire l'effort d'apprendre un "langage" dans un langage, je lui ai suggéré à la place d'utiliser les filtres de données PHP.
echo preg_match($pattern, $var1);
echo preg_match($pattern, $var2);
Ce qui est bien avec ce module, c'est qu'il présente tout le nécessaire pour valider ou épurer des données. De plus, plusieurs expressions régulières sont disponibles sous forme de constantes, donc nul besoin de se casser la tête avec une syntaxe supplémentaire.
Pour un URL, il suffit d'utiliser FILTER_VALIDATE_URL tandis que pour la syntaxe d'un courriel, ce sera FILTER_VALIDATE_EMAIL. La fonction retournera la valeur si elle correspond au filtre choisit, sinon false.
$url = 'http://code18.blogspot.com/';Avec ça, c'est clair et il n'a pas à se casser la tête. De mon côté, par curiosité, j'ai écrit une boucle qui vérifie chaque filtre un après l'autre sur la variable $data pour voir le comportement.
if( filter_var($url, FILTER_VALIDATE_URL) ){
echo 'url valide';
}
$email = 'code18.blogspot@gmail.com';
if( filter_var($email, FILTER_VALIDATE_EMAIL) ){
echo 'email valide';
}
$filters = array(Dans mon exemple, le seul filtre manquant est celui où on peut définir notre propre expression régulière. Je vous ai écrit un extrait reprenant le premier exemple, indenté pour vous aider à visualiser la structure.
'default' => FILTER_DEFAULT,
'boolean' => FILTER_VALIDATE_BOOLEAN,
'int' => FILTER_VALIDATE_INT,
'float' => FILTER_VALIDATE_FLOAT,
'url' => FILTER_VALIDATE_URL,
'email' => FILTER_VALIDATE_EMAIL,
'ip' => FILTER_VALIDATE_IP
);
$data = 'http://code18.blogspot.com/';
foreach($filters as $filterName => $filterValue){
echo $filterName . ' = ';
echo filter_var($data, $filterValue, FILTER_REQUIRE_SCALAR) ? 'Valide' : '-';
echo '<br/>';
}
$options = array(Je vous invite à jeter un oeil aux options possibles, vous serez surpris de voir à quel point c'est complet.
'options' =>
array(
'regexp' => '/^http:\/\/.*/'
)
);
echo filter_var($data, FILTER_VALIDATE_REGEXP, $options);