FONCTION DE CONTROLE DE LA VALIDITÉ DES CARACTERES D'UNE CHAINE

olivierv - 21 sept. 2001 à 11:12
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011 - 20 juil. 2006 à 13:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12796-fonction-de-controle-de-la-validite-des-caracteres-d-une-chaine

masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
20 juil. 2006 à 13:31
Autant dire que je suis un gros nul, car je ne connaissais pas l'existance de "===". donc je retire ma remarque du précédent post.
Désolé
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
20 juil. 2006 à 12:25
pour moi qui ai du mal à comprendre les expressions régulière, je trouve que le script proposé a une certaine élégence. Avec un bon vieu gout de c++. Par contre, "(if $pos === FALSE)" ne doit pas souvent fonctionner car les test logique se font avec seulement deux signes "égale". De plus, je trouve que tu aurais pu inclure les caractères valides en tant que paramètre d'appel de ta fonction.
function TestString($text, $validchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_") {


$longueurtext = strlen($text);

for ($i=0;$i<$longueurtext;$i++) {
$lettre = substr($text,$i,1);

$pos = strpos($validchars, $lettre);

if ($pos == FALSE) {
return false;
}
}

return true;

}

Allez, je mets 8.
obcstaff Messages postés 147 Date d'inscription mardi 15 novembre 2005 Statut Membre Dernière intervention 28 janvier 2008
12 déc. 2005 à 17:21
olivierv a completement raison, c'est bocoup + simple avec la fonction php ereg( ) qui controle les caractere d'une chaine, tu peux facilement paramétré les caracteres autoriser, il existe aussi la fonction eregi( ) qui est la meme fonction que ereg( ) mais qui ne se soucie pas de la casse:

if (eregi( "[^a-zA-Z_-]+", $text) )
{
echo " erreur de caractere.... ";
}

C'est ainsi kon maitrise les email (nom@serv.fr par ex), num de tel (10 chiffres unikement), adresse, et tout autres parametre POSTER......
on peut simplifier ton script :


remplaces
$lettre = substr($text,$i,1);

par
$lettre = $text[$i];

esayyes tu verras ca marche
Y'a beaucoup plus simple grace aux expressions regulieres:

if (ereg( "[^a-zA-Z_-]+", $NOM, $regs) ) {
print ("erreur");
}
Rejoignez-nous