Différentes fonctions permettent de faire des recherches de caractères ou de chaînes à l'intérieur d'une chaîne.
Parmi toutes les fonctions de recherche, les plus employées sont :
ATTENTION IMPORTANT
Toutes les fonctions de recherche retournent FALSE si elles ne trouvent pas ce qu'elles cherchent. Afin d'éviter de confondre le 0 de FALSE et le 0 de la position du premier caractère d'une chaîne, il faut toujours tester le résultat de ces fonctions avec l'opérateur d'identité === et pas avec l'opérateur d'égalité ==.
Soit le code suivant :
$x = 'François'; $pos = strpos($x, 'F');
$pos sera égal à 0, car 'F' est à la position 0 dans la chaîne $x.
Le test avec l'opérateur d'égalité simple :
if ($pos == false) { ...
ne permettra pas de faire la différence entre le nombre 0 et le
booléen FALSE. Le script sera donc faux
car il considérera que 'F' n'a pas été trouvé dans 'François'.
Pour éviter le transtypage automatique de l'opérateur d'égalité
simple et bien récupèrer le booléen FALSE ou le nombre 0, il faut
tester la valeur de retour de la fonction avec l'opérateur
d'identitié :
if ($pos === false) { ...
PHP permet de rechercher la dernière position d'un caractère dans une chaîne, mais n'offre pas de fonction permettant de rechercher la dernière position d'une sous-chaîne dans une chaîne. Pour réaliser ce travail, nous pouvons utiliser la fonction strrev() qui inverse l'ordre des caractères dans une chaîne.
Ecrivez la fonction exo_isAdresseMail qui vérifie qu'une adresse email est composée de :
La chaîne ne doit contenir aucun espace.
Il ne peut y avoir
qu'un caractère @
Les caractères doivent avoir l'un des
codes ASCII suivants :
Exemples à tester :
piat@univ-fcomte.frfr
piat@lifc.univ-fcomte.fr
piatunifc-fcomte.fr
piat@univfcomte-fr
Vous serez sans doute surpris à la lecture du code par
l'utilisation de la fonction tester.
C'est une fonction qui se trouve dans la bibliothèque bib_fonctions.php et qui permet comme son
nom l'indique de tester si une fonction renvoie le résultat
attendu.
Cette fonction accepte au minimum 3 paramètres :
Si le résultat renvoyé par la fonction à tester est celui attendu, le nom de la fonction est affiché en vert. Si ça n'est pas le cas, le nom de la fonction est affiché en rouge.
/**
* Testeur de fonction
*
* @param string arg[0] nom de la fonction à tester
* @param mixed arg[1 à n-1] paramètres à passer à la fonction
* @param mixed arg[n] résultat attendu
*/
function tester() {
$args = func_get_args();
if (count($args) < 3) {
echo '<hr>La fonction tester doit avoir ',
'au moins 3 paramètres.';
return;
}
$fonction = array_shift($args);
$attendu = array_pop($args);
$retour = call_user_func_array($fonction, $args);
$iMax = count($args);
echo '<hr><span style="color:',
($retour === $attendu) ? 'green' : 'red', '">',
'<b>', $fonction, '</b></span>',
'<br>Paramètre', ($iMax > 1) ? 's : ' : ' : ';
for ($i = 0; $i < $iMax; $i++) {
echo '<span style="background:#ebebeb;margin:0 5px;">';
var_dump($args[$i]);
echo '</span>';
}
echo '<br>Attendu : ';
var_dump($attendu);
echo '<br>Retourné : ';
var_dump($retour);
}