francoisch Posté 18 Novembre 2011 Posté 18 Novembre 2011 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
yuston Posté 18 Novembre 2011 Posté 18 Novembre 2011 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.
francoisch Posté 18 Novembre 2011 Auteur Posté 18 Novembre 2011 (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é 18 Novembre 2011 par francoisch
yuston Posté 18 Novembre 2011 Posté 18 Novembre 2011 (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é 18 Novembre 2011 par yuston
captain_torche Posté 18 Novembre 2011 Posté 18 Novembre 2011 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.
jcaron Posté 19 Novembre 2011 Posté 19 Novembre 2011 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.
francoisch Posté 19 Novembre 2011 Auteur Posté 19 Novembre 2011 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant