Page 1 sur 1

fonction EREG ou est l'erreur ?

Posté : 04 avr. 2007, 23:13
par phi3001
bonjour,

j'ai un formulaire avec pour seul demande le nom de la personne.
sur mon fichier validation.php, j'ai mis une fonction EREG qui oblige l'utilisateur a rentrer des caractère alphabetique et l'interdit de rentrer des caractères numerique.

ca ne marche pas a 100%.
j'y je rentre : phil55555phil ou xyze33333 ca fonctionne

ou est mon erreur ?

merci de votre aide
</head>

<body>
<?php 
$nom=$_POST["champnom"];
if (empty ($nom))
{
echo "attention le champ nom est vide";
exit();
}

if (ereg ( "^[a-zA-Z][^0-9]", $nom))
 {
 echo "Votre nom est : ".$nom;
 }
 else
 {
 echo 'Formulaire mal rempli';
 }
 ?>
</body>
</html>

Posté : 04 avr. 2007, 23:29
par Ultim4T0m
N'étant pas un pro des expressions régulières, je dirais simplement qu'il manque le délimiteur :
ereg ( "#^[a-zA-Z][^0-9]#", $nom)
A tester... Je n'assure rien ^^'

Posté : 04 avr. 2007, 23:57
par Truc
@phi3001 : pense bien a la mise en forme du code grâce qux balises
Des indications sont disponibles sur la manière de mettre en forme les messages dans la FAQ

Sinon rapidement pas besoin de délimiteurs avec ereg, ereg_replace... (POSIX) seulement avec les PCRE (preg_*)

Dans ce cas pourquoi inclure les 2 classes de caractères.. faudrait en interdire une :
if (!preg_match("#\d#")))
{
 echo "Votre nom est : ".$nom;
 }
 else
 {
 echo 'Formulaire mal rempli';
 } 
Pareil, expert... s'il y a mieux :wink:

Posté : 05 avr. 2007, 00:04
par Ultim4T0m
Pareil, expert... s'il y a mieux :wink:
Ca reste mieux que moi :P Et bien expliqué en plus (mais j'étais pas loin, j'y arriverais un jour ^^)

Ca marche encore moins

Posté : 05 avr. 2007, 07:03
par phi3001
bonjour à tous

merci de vos conseil, mais maintenant ca me mets une erreur "'parse error'
<?php 
$nom=$_POST["champnom"];
if (empty ($nom))
{
echo "attention le champ nom est vide";
exit();
}

if (!preg_match("#/d#"), $nom))
 {
 echo "Votre nom est : ".$nom;
 }
 else
 {
 echo 'Formulaire mal rempli';
 }
 ?>
merci encore pour votre aide

Re: fonction EREG ou est l'erreur ?

Posté : 05 avr. 2007, 08:03
par Expreg
qui oblige l'utilisateur a rentrer des caractère alphabetique et l'interdit de rentrer des caractères numerique.

ca ne marche pas a 100%.
j'y je rentre : phil55555phil ou xyze33333 ca fonctionne
Si tu ne veux accepter que des caractères alphabétqiue il faut faire comme ça :
<?php
if (!preg_match('`^[[:alpha:]]$`', $_POST['nom']))
 {
 echo 'Votre nom ne peut contenir que des caractères alphabétiques.';
 }
 else
 {
 // on poursuit le script
}
?>
ou sans regex :
<?php
if (!ctype_alpha($_POST['nom']))
 {
 echo 'Votre nom ne peut contenir que des caractères alphabétiques.';
 }
 else
 {
 // on poursuit le script
}
?>
Autre chose ici :
<?php
$nom=$_POST["champnom"];
if (empty ($nom))
{
echo "attention le champ nom est vide";
exit();
}
L'utilisation de empty() c'est très bien mais faut tenir compte des espaces !!!
Donc tu feras :
<?php 
$nom=trim($_POST['nom']);
if (empty($nom))
{
echo 'attention le champ nom est vide';
}
else
{
// la regex....
?>
Mieux encore, tu vérifies tout en une fois :
<?php 
$nom=trim($_POST['nom']);
if(empty($nom) || !preg_match('`^[[:alpha:]]$`', $nom))
{
echo 'Attention  !<br /> - soit le champ nom est vide<br />- soit le champ nom contient des caractères interdits<br />
pour rappel, seuls les caractères alphabétiques sont acceptés.';
}
else
{
// la suite du script
?>

Super mais encore une question

Posté : 05 avr. 2007, 17:47
par phi3001
c'est nickel avec ce code :

<?php
if (!preg_match('`^[[:alpha:]]$`', $_POST['nom']))
 {
 echo 'Votre nom ne peut contenir que des caractères alphabétiques.';
 }
 else
 {
 // on poursuit le script
}
?> 


mais c'est quoi c'est ponctuation ? : '`
j'en ai jamais entendu parler et pourtant le code ne marche que comme ca

je connais "", ' ' mais pas l'autre

quelqu'un peut t'il me l'expliquer ?

Posté : 05 avr. 2007, 18:06
par Ultim4T0m
L'explication se trouve dans le post de Truc ;)

Par contre, je ne trouve pas forcement mieux le fait de tout tester en une seule fois, et de dire à l'utilisateur : "C'est soit ça, soit ça, ou encore ça"

Mieux vaut faire les tests séparément et afficher une erreur en fonction de celle faite par l'utilisateur.

ou ?

Posté : 05 avr. 2007, 18:48
par phi3001
désolé mais ou est le post de 'truc' qui me dit ce que veut dire cette ponctuation ?

Posté : 05 avr. 2007, 18:52
par Ultim4T0m
Sinon rapidement pas besoin de délimiteurs avec ereg, ereg_replace... (POSIX) seulement avec les PCRE (preg_*)
Les ` sont les délimiteurs, moi j'avais utilisé # dans mon exemple faux.

Posté : 05 avr. 2007, 19:09
par Expreg

Posté : 05 avr. 2007, 20:25
par orgerix
J'ai un problème aussi avec ereg().

J'ai fait un script basique avec ereg() vu que je maitresise pas du tout les expressions réguliaire.
<?php
$reg="^[:digit:]+$";
$num='100';
$a='aba';
if (ereg($reg,$num))
	{print($num);}
if (ereg($reg,$a))
	{print($a);}
?>
Normalement, c'est censé renvoyé 100.

Or ca ne revoit rien...