Probleme fonction check_form

kkkkkkkk - Modifié le 7 mars 2022 à 09:56
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 12 mars 2022 à 00:26
Bonjour,
voici mon enonce :
Il faut écrire la fonction check_form. Celle-ci prend un tableau associatif en paramètre. Ce dernier contient les clés suivantes :

nom
prenom
CP
La fonction check_form doit vérifier que les données sont valides. Pour être valides les données doivent respecter les contraintes suivantes :

Le nom doit exclusivement être composé des caractères de a à z, de - et (d'espace).
Le prenom doit exclusivement être composé des caractères de a à z, de - et (d'espace).
CP est une valeur numérique comprise entre 1000 et 9999.
La fonction retournera :

TRUE si toutes les valeurs répondaient aux critères attendus
FALSE si au moins une valeur ne répond pas aux critères attendus

voila ce que j'ai fait mais je pense que mes condition ne sont pas bonne mais je ne sais pas quoi faire :

<?php
function check_form($data)
{
$cvs = [
'nom' => '#^[a-z -]*$#',
'prenom' => '#^[a-z -]*$#',
'CP'=> '#^[0-9]{4}$#'
];
$valide=true;
foreach($cvs as $key => $value)
{
    $tab[$key]["valide"]=(bool)preg_match($value,$data[$key]);
 if ( $tab[$key]["valide"]==false )
 
 { 
     $tab[$key]["message"]=$key."est invalide";
     $valid=false;
}
}

$tab["valide"]=$valide;

return $tab;

}
?>

2 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
7 mars 2022 à 10:03
Bonjour
Je ne code pas en PHP, mais pour augmenter tes chances de réponse, j’ai édité ton message pour y ajouter les balises de coloration (voir ce cours tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code pour tes prochains messages)

D’autre part, il existe des sites en ligne pour tester les regex. regex101 notamment permet de tester avec le moteur de regex php > 7.3 et le moteur php > 7.3.

Voici un exemple avec ce dernier et ta propre regex

https://regex101.com/r/m61wq7/1

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
12 mars 2022 à 00:26
<?php
function checkForm($data)
{
  $nameFilter = '/^([a-zA-Z]{1})([a-zA-Z-\s]+)([a-zA-Z]{1})$/';
  $cpFilter   = '/^[1-9]{1}[0-9]{3}$/';
  return
    array_key_exists('nom', $data)
  &&
    array_key_exists('prenom', $data)
  &&
    array_key_exists('CP', $data)
  &&
    preg_match($nameFilter, $data['nom'])
  &&
    preg_match($nameFilter, $data['prenom'])
  &&
    preg_match($cpFilter, $data['CP']);
}


$falseData1 = [
  "nom" => " -",
  "prenom" => "-* ",
  "CP" => "0"
  ];
$falseData2 = [
  "prenom" => "Gerard",
  "CP" => "2555"
  ];
$trueData1 = [
  "nom" => "Marie-annick",
  "prenom" => "Dumont",
  "CP" => "1222"
];
$trueData2 = [
  "nom" => "benoit",
  "prenom" => "pascal-philippe de crapodix",
  "CP" => "6999"
];

echo (checkForm($falseData1)?'ok':'pas ok')."\n";
echo (checkForm($falseData2)?'ok':'pas ok')."\n";
echo (checkForm($trueData1)?'ok':'pas ok' )."\n";
echo (checkForm($trueData2)?'ok':'pas ok' )."\n";

?>

0
Rejoignez-nous