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 14/11/2006, 22h16   #1
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Par défaut Validation d'un champ prénom

Salut tout le monde,

voila je dois checker la validité d'un champ prénom. donc il ne dois pas contenir de numéro ni que caractères spéciaux mise à part le "-" pour un prénom composé.

je pense que la meilleure méthode pour le faire c'est de faire un bon regex mais je ne sais vraiment pas comment le faire... est-ce que quelqu'un pourrait me donner un petit exemple ?

pour le moment jai que sa lol

Code :
$regexNom = '`^[a-zA-Z-]+$`';
jaimerai encore savoir comment lui dire que le trait d'union ne dois pas etre en début de chaine ni a la fin et qu'il accèpte les accent ? merci
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 08h29   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Essaye ça :

Code :
1
2
3
4
5
6
$prenom = 'rené';
 
if( preg_match('#^[^-][[:alpha:]-]+$#', $prenom ) )
  echo 'ok';
else 
  echo 'pas ok';
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 08h55   #3
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
salut !

merci mais sa ne fonctionne pas correctement ! si je met un "-" au début il dis que cest faux donc sa sa marche mais si je le met à la fin, il dis que cest juste ... donc il faut encore checker que si on le met a la fin, il renvoie false

et si ya un accent ou un truc dans le genre il renvoie false aussi donc cest pas encore sa...
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 09h15   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Pour les accents, normalement alpha les inclus dedans donc je vois pas.

j'avais pas vu que tu voulais interdire le tiret en fin de chaine également.
Code :
1
2
3
4
5
6
7
 
$prenom = 'rené';
 
if( preg_match('#^[^-][[:alpha:]-][^-]+$#', $prenom ) )
  echo 'ok';
else 
  echo 'pas ok';
Chez moi j'ai true, pour rené, re-né, et false pour -rené, rené-
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 09h44   #5
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
sa marche mais moi pour ne-né jai false--- il accepte pas du tout les tiret...
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 16h51   #6
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Ah oui désolé, j'ai mis le + en fin de masque

C'est
Code x :
'#^[^-][[:alpha:]-]+[^-]$#'

Par contre les chiffres seront également interdits avec ce masque.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 17h44   #7
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
merci mais tu es sur que [alfa] soit correcte ? parce que maintenant si je tape marie-noé il return true mais si ya qqch après, une simple lettre sa return false
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2006, 17h55   #8
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Ben oui

Si t'as un problème avec, au lieu de [:alpha:], utilise \w, mais ça revient au même.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 08h03   #9
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
ouais ok mais cest pas normal que lorsque je tape marie-noél il revoie false alors que si je tape marie-noel il renvoie true non ?

il dois encore y avoir une tite erreur dans le regex a mon avis
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h38   #10
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Je pense que ton problème est ailleurs, chez moi marie-noël renvoi true, donc les lettres accentuées sont bien prises en compte.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h43   #11
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Envoyé par cyrill
il dois encore y avoir une tite erreur dans le regex a mon avis
redonne le regexp que tu utilise ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h45   #12
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Par défaut Fusion ( une minute d'intervalle... )

ben voici un extrait de mon code ... je ne voit pas vraiment ou est le problème...

Code :
1
2
3
4
5
6
7
8
$regexNom = '#^[^-][[:alpha:]-][^-]+$#';//regex pour spécifier ce que l'on désire dans la chaine
 
				if(!preg_match($regexNom,$value)){
					$str .= $instance_lang -> Loadlang('texteCheckNomCaractInscription').'<br>';
					$error = true;
				}else{
					$str .= '';
				}
???

Citation:
Envoyé par Maxoo
redonne le regexp que tu utilise ?
Code :
$regexNom = '#^[^-][[:alpha:]-][^-]+$#';
voila
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h49   #13
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
ton regexp marche super !!
tu peux la tester en live ici : http://elbong.free.fr/regexotron/

Mais si ton code ne marche pas, faut peut etre voir ce qui arrive dans $value !!

Peut être que c'est pas é mais &eacute ??
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 09h58   #14
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
hum ouais bizare... faut que check sa mais normalent cest un string parce que je crée cette variable en js de la maniere suivante :

Code :
var value = document.getElementById(mode).value;
ensuite j'envoie à une autre page

Code :
$value = $_POST['value'];
//oui oui cest bien du post qui arrive lol

mais bon avant d'envoyé mon post je fais
cest surement pour sa non ?
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h40   #15
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
hum cest a 99% sa ! parce que encode_URI fait que les caractères spéciaux sont transformés en séquences de signes ASCII.

donc je devrai faire utiliser la fonction decodeURI() avant de mettre $_post['value'] dans la variable $value cest bien sa ?

ya t'il possibilité de décoder sa en php et non pas en js ? donc d'avoir la meme fonction que decodeURI() mais en php ?
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 12h04   #16
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
decodeURI fait quoi ?

moi je serai toi je ferai le test regexp sur la value "nature" donc é et pas un caractère encodé ...
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 14h06   #17
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Citation:
Envoyé par Maxoo
decodeURL fait quoi ?

moi je serai toi je ferai le test regexp sur la value "nature" donc é et pas un caractère encodé ...
ben l'inverse de encodeURL donc il transforme tous les caractére ASCII en sa valeur binaire...

Ouais mais cest pas possible dans cas d'application de faire sa avant lol parce que cest 1200 lignes de code en ajax pour checker un gros formulaire et on px pas le faire avant d'avoir encoder $value lol
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 14h50   #18
Membre habitué
 
Homme
Inscription : octobre 2006
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 124
Points : 100
Points : 100
Bonjour,

Je viens relancer ce post, car je cherche aussi à tester la validité d'un prénom à l'aide d'une expression régulière et je suis confronté au problème suivant, les caractères accentués ne sont acceptés qu'en début ou fin de chaine.

voici le contrôle que je fais :
Code :
!ereg('^[^-][[:alpha:]-]+[^-]$', $prenom)
et les résultats :
benoit : true
Jean-Paul : true
émile : true
Jérôme : false
Jérô : false
Jerô : true
Marie-noë : true
Marie-noël : false
bigben99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 16h34   #19
Membre habitué
 
Homme
Inscription : octobre 2006
Messages : 124
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2006
Messages : 124
Points : 100
Points : 100
à force de torturer mon expression régulière, j'ai pu légérement avancer.

Les accents sont acceptés en début ou fin car [^-] signifie n'importe quel caractère à l'exception de "-".

C'est donc un pas en avant pour trois pas en arrière, avec des caractères accentués en première ou dernière position ne m'interesse pas et en plus avec l'expression ci-dessus, je peux avoir des chiffres ou autres caractères en début ou fin de chaine.

Donc je suis reparti sur une nouvelle expression :
Code :
^[a-zA-Z]+(-[a-zA-Z]+)?$
ca me semble meilleur que la précédente, mais je bute toujours sur les caractères accentués...

Suis-je obligé de les inclure individuellement dans mon expression au risque d'en oublier ?
[a-zA-Zéèçàùâêûîôäëüïö]
bigben99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2007, 18h43   #20
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
Citation:
Envoyé par bigben99
Suis-je obligé de les inclure individuellement dans mon expression au risque d'en oublier ?
[a-zA-Zéèçàùâêûîôäëüïö]
avec les fonctions POSIX, oui. mais avec les fonctions PCRE, c'est selon la configuration locale. la fonction équivalente est preg_match().
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h04.


 
 
 
 
Partenaires

Hébergement Web