fonction EREG ou est l'erreur ?

Eléphanteau du PHP | 37 Messages

04 avr. 2007, 23:13

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>

Eléphant du PHP | 445 Messages

04 avr. 2007, 23:29

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 ^^'
LLDC
Ulti

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 avr. 2007, 23:57

@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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 445 Messages

05 avr. 2007, 00:04

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 ^^)
LLDC
Ulti

Eléphanteau du PHP | 37 Messages

05 avr. 2007, 07:03

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

Eléphant du PHP | 170 Messages

05 avr. 2007, 08:03

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
?>
Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Eléphanteau du PHP | 37 Messages

05 avr. 2007, 17:47

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 ?

Eléphant du PHP | 445 Messages

05 avr. 2007, 18:06

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.
LLDC
Ulti

Eléphanteau du PHP | 37 Messages

05 avr. 2007, 18:48

désolé mais ou est le post de 'truc' qui me dit ce que veut dire cette ponctuation ?

Eléphant du PHP | 445 Messages

05 avr. 2007, 18:52

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.
LLDC
Ulti

Eléphant du PHP | 170 Messages

05 avr. 2007, 19:09

Benjamin Franklin a dit :
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends

Mammouth du PHP | 693 Messages

05 avr. 2007, 20:25

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...