Aller au contenu

Sujets conseillés

Posté

Bonjour

Je cherche le moyen le meilleur pour vérifier un champ de saisie dans un formulaire.

Lutilisateur peut saisir dans ce champ 9 mots différents, que je connais naturellement ; par ex. : bureautique, accessoire, .

Chacun de ces mots peut apparaître seul ou bien comporter un suffixe, par ex. : 01, 02, 07, jusquà 99.

Ce qui peut faire, par ex. : bureautique01, accessoire, bureautique, accessoire06,

Comme le suffixe napparait pas toujours, je ne peux pas supprimer systématiquement les deux derniers caractères pour rechercher ensuite dans la liste des 9 noms.

Faut-il dabord rechercher 01, 02, 03 (avec array_search() ?), et le supprimer sil existe, pour vérifier ensuite avec la liste des 9 noms ?

A linverse, je ne peux pas faire un array_search() avec le mot saisi car il peut avoir, ou ne pas avoir, de suffixe.

Merci par avance de vos conseils.

Francois

Posté

Tu peux faire un regex sur les deux derniers caractères pour vérifier si c'est un nombre ou pas.

Sinon, personnellement, pour simplifier le problème, j'aurais fait deux champs select. Le premier liste les neufs mots et le deuxième liste les nombres de 00-99.

Posté (modifié)

Merci de ta réponse.

Comme je débarque complètement dans ce sujet, j'essaie de tester la numéricité du champ $page avec:


if(preg_match('`^[[:digit:]]{1,2}$`',$page)) $res="numerique"; else $res="pas numérique";

sans succès.

Une fois que je saurai s'il y a du numérique dans la valeur de la variable, je pourrai supprimer les deux derniers caractères et valider le reste avec les 9 mots valides.

A ton avis?

Francois

Modifié par francoisch
Posté (modifié)

Salut,

teste quelque chose comme :


if(preg_match('#[a-z]+[0-9]{2,2}#i',$page)) $res="numerique"; else $res="pas numérique";

Edit:

Plus simple encore, suis allé trop vite avant ^^


if(preg_match('#[0-9]{2}$#',$page)) $res="numerique"; else $res="pas numérique";

Modifié par yuston
Posté

Tu peux aussi faire une expression régulière qui cible tout , même si c'est un peu laborieux :

$reg = '#^(bureautique|accessoire||tes|autres|mots)[0-9]{,2}$#';

Mais effectivement, le plus simple seraient deux champs select. Comme ça, pas de risque de faute de frappe.

Posté

C'est clair que je ne comprends pas bien la logique (un select et soit un autre select soit un champ texte séparé sembleraient en effet nettement plus appropriés), mais s'il faut vraiment tester ça, une regex du genre '/^(mot1|mot2|mot3|etc)(\d{0,2})$/' permettra de valider tout ça ET de récupérer dans $matches[1] et [2] le mot et le nombre.

Jacques.

Posté

bonjour et merci de vos réponses.

J'ai finalement utilisé:


if(preg_match('#[0-9]{2}$#',$page))

suivi d'un array_search().

Ca fonctionne impeccablement, merci de votre aide qui a été déterminante.

Francois

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...