Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 14h17   #1
Invité régulier
 
Inscription : mai 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 30
Points : 5
Points : 5
Par défaut Expression régulière sur des caractères alphanumériques

Voilà je cherche à savoir si des caractères sont alphanumériques et sans accent.
J'ai testé ça :
Code :
1
2
3
4
5
6
7
 
$caractere = 'élection';
if(preg_match("/[a-z0-9]+/",$caractere)) {
	echo "bon";
} else {
	echo "pas bon";
}
Et là il me met que c'est "bon".
Mais des que je mets des "bonnes lettres" il me dit que c'est bon.
hash95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 14h28   #2
Membre Expert
 
Avatar de riete
 
Homme Thierry
NFC & DevWeb
Inscription : avril 2006
Messages : 1 175
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 51
Localisation : France

Informations professionnelles :
Activité : NFC & DevWeb
Secteur : Bâtiment

Informations forums :
Inscription : avril 2006
Messages : 1 175
Points : 1 366
Points : 1 366
Dans ce cas ca marche, mais ya surement mieux. Ton pb vient du fait que tu le résultat que tu test est celui du dernier caractère de ta chaÎne.
Il faut aussi que tu accepte les majuscules (enfin, il me semble).
Code :
1
2
3
4
5
6
$caractere = 'é';
if(preg_match("/[A-Za-z0-9]+/",$caractere)) {
	echo "bon";
} else {
	echo "pas bon";
}
riete est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 14h37   #3
Invité régulier
 
Inscription : mai 2006
Messages : 30
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 30
Points : 5
Points : 5
J'ai testé ça comme code :
Citation:
if(preg_match('/^[a-zA-Z0-9]*$/',$caractere))


ou


if(preg_match('`[^a-zA-Z0-9]`',$caractere))
Apparement ça marche bien va savoir pourquoi.
hash95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h26   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il faut soit jouer sur la négation soit c'est une question d'ancrage : le résultat revient au même.

Dans votre code :
Code :
1
2
3
4
5
6
$caractere = 'élection';
if(preg_match("/[a-z0-9]+/",$caractere)) {
	echo "bon";
} else {
	echo "pas bon";
}
Il est normal d'obtenir "bon" pour résultat puisqu'il n'y a pas d'ancrage et la correspondance portera sur la partie "lection" de la chaîne. (il n'y a qu'à préciser le paramètre matches et l'exploiter pour vérifier)

Pour conserver le principe il faut donc marquer le début et la fin de la chaîne (respectivement ^ et $), ce qui donne :
Code :
1
2
3
4
5
6
$caractere = 'élection';
if(preg_match("/^[a-z0-9]+$/",$caractere)) {
	echo "bon";
} else {
	echo "pas bon";
}
Le résultat sera ainsi correct.

Comme vous l'avez justement proposé ci-dessus, il est possible d'écrire le contraire, c'est à dire chercher à savoir si la chaîne contient au moins un caractère qui n'est pas alphanumérique (et excluant les caractères accentués). Ce qui se traduit par :
Code :
1
2
3
4
5
6
$caractere = 'élection';
if (!preg_match("/[^a-z0-9]/",$caractere)) {
	echo "bon";
} else {
	echo "pas bon";
}
Pour être strict par rapport à votre définition il faudrait, a priori, prendre compte de la casse (en rajoutant A-Z dans la classe ou tout simplement le modificateur i).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h21.


 
 
 
 
Partenaires

Hébergement Web