PHP : Valider NOM PRÉNOM avec accent exp rég

Résolu/Fermé
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015
- Modifié par katarina999 le 11/09/2011 à 12:19
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
- 12 mars 2013 à 09:25
Bonjour,

J'ai un petit problème concernant la validation d'un nom (idem pour prénom, ville) contenant que des lettres minuscules, majuscules avec ou sans accent.

Voici mon code

//nom  
        $nom = ucfirst($_POST["nom"]);  
 //regex pour le nom  
 if (preg_match("/^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ[:blank:]-]{1,75})$/", $nom))  
  $regex_nom = true;  
 else  
  $regex_nom = false;  

//si le nom est invalide  
 if (!empty($nom) and ($regex_nom == false))  
  $msg .= 'Nom invalide <br />';  


Mon message d'erreur s'affiche quand je fais le test avec René par exemple.

J'avais utilisé ce code pour une insertion dans un base de données et actuellement je le réutilise pour un formulaire de contact. Mais bizarrement, il ne fonctionne pas comme je l'espère.

Merci de bien vouloir me porter secours.

Katarina999 ;)

4 réponses

ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
20 sept. 2011 à 23:25
tu peux pas mettre le blanck a imbriqué ainsi
3
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015

1 oct. 2011 à 22:33
merci de m'avoir répondu, mais qu'entends-tu par blanck?
0
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
957
3 oct. 2011 à 04:32
Aucun rapport. Par contre l'encodage de ton source est il consistant avec l'encodage par défaut ?
Mon fichier en utf8:
<?php
$noms = array(); 
$noms[] = 'Hervé';
$noms[] = 'Gérard      ';
$noms[] = 'René';
$noms[] = 'Anaïs';
$noms[] = 'Noël';
$noms[] = 'Güdrun';
$noms[] = 'Jean louis';
 ;

$pattern = "/^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ[:blank:]-]{1,75})$/";


foreach ($noms as $prenom) 
{ 
	printf("Longueur en bytes  '%s' = %d\t Longueur en caractères %d\t", $prenom, strlen($prenom), iconv_strlen($prenom, 'utf8'));

	if (preg_match($pattern, $prenom)) 
	echo "$prenom satisfait le masque\n";	
	else 
	echo "$prenom ne satisfait pas le masque\n";
}
?>
johand@osiris:~/src/CCM/php$ php5  regexp01.php
Longueur en bytes  'Hervé' = 6	 Longueur en caractères 5	'Hervé' satisfait le masque
Longueur en bytes  'Gérard      ' = 13	 Longueur en caractères 12	'Gérard      ' satisfait le masque
Longueur en bytes  'René' = 5	 Longueur en caractères 4	'René' satisfait le masque
Longueur en bytes  'Anaïs' = 6	 Longueur en caractères 5	'Anaïs' ne satisfait pas le masque
Longueur en bytes  'Noël' = 5	 Longueur en caractères 4	'Noël' ne satisfait pas le masque
Longueur en bytes  'Güdrun' = 7	 Longueur en caractères 6	'Güdrun' ne satisfait pas le masque
Longueur en bytes  'Jean louis' = 10	 Longueur en caractères 10	'Jean louis' satisfait le masque

Johan
0
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015

4 oct. 2011 à 08:48
Merci beaucoup !
Je vais faire le test et je te dirai si cela marche avec mon formulaire.
0
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015

10 avril 2012 à 16:28
Bonjour,

Comme tu l'avais dit, mon encodage était UTF-8. Je l'ai donc passé en iso-8859-1 et tout fonctionne.
Cependant, j'ai souvent ce genre de problème lorsque je code en PHP. Je ne sais pas s'il faut être en UTF-8 ou en iso-8859-1. Que me conseillerais-tu ?

Merci.
0
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015

17 sept. 2011 à 10:32
Voici mon code, qui pourrait trouver le bug qui s'y cache ?

<?php
	if (isset($_POST['envoyer']))
	{
		//VARIABLE
		//initialise la variable de messages d'erreurs à vide
		$msg = '';
		
		//nom
		$nom = ucfirst($_POST["nom"]);
		//regex pour le nom
		if(preg_match("/^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ[:blank:]-]{1,75})$/", $nom))
			$regex_nom = true;
		else
			$regex_nom = false;
			
		//ERREURS
		//si données manquantes
		if (empty($nom) or empty($prenom))
		{
			$msg .= 'Remplir le form. <br />';
		}
		//si le nom n'est pas valide
		if ((!empty($nom)) and ($regex_nom == false))
			$msg .= 'Nom invalide <br />';
		if (empty($msg))
		{
			echo 'Nom : '.$nom.'<br />';

		}
		else
		{
			echo $msg;
			include('form.php');
		}
	}
	else
	{ include('form.php'); }

?>


Et voici le formulaire qui est dans un fichier form.php

<form method="post" action="">
	<p>Nom * : <input name="nom" size="30" maxlength="40" /></p>
	<p><input type="submit" value="Envoyer" name="envoyer"</p>
</form>


Ce code fonctionnait pour un formulaire qui entrait le données reçues dans une BDD. Mais cette fois-ci, mon code ne valide plus les accents, pourtant il ne s'agit d'un copier coller de mon ancien code !

Merci d'avance !
0
ktm620enduro
Messages postés
293
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
12 mars 2013
38
12 mars 2013 à 09:25
le charset est-il toujous le meme... ça serait un classique.
0
Bonjour,
Le test effectué fonctionne pourtant très bien :
<?php
//$nom = 'Hervé';
//$nom = 'Gérard';
//$nom = 'René';
//$nom = 'Anaïs';
//$nom = 'Noël';
//$nom = 'Güdrun';
$nom = 'Jean louis';

if(preg_match("/^([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ[:blank:]-]{1,75})$/", $nom)) 
	echo "$nom satisfait le masque";
else 
	echo "$nom ne satisfait pas le masque";
?>

Bien entendu, le prénom Anaïs ne satisfait pas le masque car le ï n'est pas pris en compte dans le masque ainsi que le ë de Noël et le ü de Güdrun (minuscules et capitales).
-1
katarina999
Messages postés
68
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
28 avril 2015

17 sept. 2011 à 09:53
Tout d'abord merci de m'avoir répondu.
Bizarrement, ça ne fonctionne plus de mon côté, je vais réessayer.
Aurais-tu une autre expression qui ferait la même chose ?

Merci !

Katarina999.
0
Il ne faut pas oublier les caractère spéciaux de liaison comme pour "Jean-Marie", je ne crois pas que le tiret soit pris en compte...
Xin999
0