espace jamais retrouvé dans une chaine de caractère.

Eléphant du PHP | 75 Messages

08 avr. 2010, 19:16

Bonsoir,

Dans un fonction vérification des pseudos des membres je souhaite inclure un script qui détecte si l'utilisateur à mentionné des caractères interdit dans son pseudo.

Le code ressemble à ça :
			$caractere_interdit[1] = ' ';
			$caractere_interdit[2] = ',';
			$caractere_interdit[3] = ';';
			$caractere_interdit[4] = '.';
			$caractere_interdit[5] = '/';
			$caractere_interdit[6] = '?';
			
			foreach($caractere_interdit AS $traitement){
				if(strpos($pseudo,$traitement) == true){
					$erreur .= '- Votre pseudo ne doit pas contenir d\'espace, ni de "," de ";", de ".", de "/" ou encore "?"';
					return $erreur;				
				}
			}
Il fonctionne à peu prêt.

Si je test avec ça : a a. Le message d'erreur est bien visible mais si jamais j'entre seulement un espace dans le champ pseudo, le pseudo est considéré comme bon.

Une idée ?

ViPHP
ViPHP | 2287 Messages

08 avr. 2010, 19:40

Hello,

La réponse est dans le manuel : http://fr.php.net/strpos (le gros rectangle rouge dans la page)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 75 Messages

08 avr. 2010, 19:53

J'ai oublié de précisé.

Quand j'ai mis === au lieu de == a aucun moment la fonction me retourne une erreur. :/

ViPHP
ViPHP | 2287 Messages

08 avr. 2010, 20:01

J'ai oublié de précisé.

Quand j'ai mis === au lieu de == a aucun moment la fonction me retourne une erreur. :/
Oui, parcequ'à aucun moment on ne t'a recommandé de comparer la valeur de retour de strpos() à true, ça n'a pas de sens ;-)

strpos retourne un chiffre (pouvant être un 0) quand l'objet de la recherche a été trouvé, ou FALSE sinon. Tu peux t'insipirer des exemples de la page de manuel donnée en lien, qui présentent deux façons différentes d'utiliser strpos() correctement.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

devlop78
Invité n'ayant pas de compte PHPfrance

08 avr. 2010, 20:20

if(strpos($pseudo,$traitement) !== false){

Le mieux reste pour ce genre de choses de préciser les caractères autorisés et non interdits

ViPHP
ViPHP | 5462 Messages

08 avr. 2010, 20:43

t'embête pas a faire une boucle, tu fais un str_replace avec un condition apres
if(str_replace($caractere_interdit, null, $pseudo) !== $pseudo)
{
   //erreur
}

Eléphant du PHP | 75 Messages

08 avr. 2010, 21:11

Problème résolue :
			foreach($caractere_interdit AS $traitement){
				if(strpos($pseudo,$traitement) !== false){
					$erreur .= '- Votre pseudo ne doit pas contenir d\'espace, ni de "," de ";", de ".", de "/" ou encore "?"';
					return $erreur;				
				}
			}
Merci a vous pour votre réactivité ! :D