Formulaire React avec validation accessible (React Hook Form + Zod)
Générez un formulaire React avec schéma de validation, messages d’erreur accessibles, envoi sécurisé, erreurs serveur par champ et une liste de tests pour le vérifier. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 5 variables personnalisables et vous pouvez le copier gratuitement en un clic.
Intermédiaire · Code · En attente de relecture éditoriale
Prompt
Agis comme un développeur frontend senior spécialisé dans les formulaires accessibles et la validation robuste en React.
Contexte :
- Champs et règles : {{champs}}
- Ce qui se passe à l'envoi : {{envoi}}
- Bibliothèque : {{bibliotheque}}
- Styles : {{styles}}
- Langue des messages d'erreur : {{langue_messages}}
S'il manque un élément clé (format d'erreur du serveur, champs facultatifs, règles conditionnelles), pose-moi la question avant d'écrire du code.
Livrables :
1. Le schéma de validation typé (avec {{bibliotheque}}), avec des messages clairs qui expliquent comment corriger, et comment le réutiliser côté serveur.
2. Le composant du formulaire en TypeScript : libellés visibles associés à chaque champ, `aria-invalid`, `aria-describedby` vers le message d'erreur et l'aide, et focus sur le premier champ en erreur à l'envoi.
3. Un moment de validation raisonnable : pas d'erreur tant que l'utilisateur n'a pas quitté le champ, puis revalidation pendant la correction.
4. L'état d'envoi : bouton désactivé ou avec indicateur, prévention du double envoi, message de succès annoncé via une région `aria-live`.
5. Les erreurs serveur : comment les rattacher au bon champ ou les afficher comme erreur générale.
6. Une liste de cas de test (manuels ou automatisés), y compris au clavier et avec un lecteur d'écran.
Contraintes :
- La validation côté client est un confort, pas une sécurité : rappelle-le et indique ce qu'il faut toujours valider côté serveur.
- N'affiche jamais de données personnelles ni de mots de passe dans la console.
- N'invente pas d'endpoint : utilise [À COMPLÉTER] si je ne l'ai pas fourni.
- Utilise les attributs `autocomplete` et `inputmode` appropriés.
Format : un bloc de code par fichier avec son nom, et une brève explication de chaque choix.Comment l'utiliser
- Liste les champs avec leurs vraies règles (obligatoire, longueur, format). 2. Indique l’endpoint ou la Server Action qui reçoit les données. 3. Colle le code, teste le formulaire uniquement au clavier et demande des ajustements précis.
Exemple d'utilisation
Champs : nom (obligatoire), e-mail (valide), téléphone (facultatif, format français), message (20 à 1000 caractères) · Envoi : POST /api/contact · Bibliothèque : React Hook Form + Zod · Styles : Tailwind CSS.
Exemple de résultat
1. Schéma partagé (contactSchema.ts)
import { z } from 'zod';
const telephoneFR = /^(?:\+33\s?|0)[1-9](?:[\s.-]?\d{2}){4}$/;
export const contactSchema = z.object({
nom: z.string().trim().min(1, 'Indiquez votre nom'),
email: z.string().trim().email('Indiquez un e-mail valide, par exemple nom@domaine.fr'),
telephone: z
.string()
.trim()
.regex(telephoneFR, 'Indiquez un numéro à 10 chiffres, par exemple 06 12 34 56 78')
.or(z.literal('')),
message: z
.string()
.trim()
.min(20, 'Le message doit contenir au moins 20 caractères')
.max(1000, 'Le message ne peut pas dépasser 1000 caractères'),
confidentialite: z.literal(true, {
errorMap: () => ({ message: 'Vous devez accepter la politique de confidentialité pour continuer' }),
}),
});
export type ContactInput = z.infer<typeof contactSchema>;
Le même schéma est importé dans /api/contact avec contactSchema.safeParse(body) : la validation côté client est un confort, celle du serveur protège. Le formulaire utilise zodResolver(contactSchema) avec mode: 'onTouched', et chaque champ reçoit aria-invalid et un aria-describedby pointant vers son erreur…
Informations clés
- Catégorie
- Programmation et développement · React
- Type de résultat
- Code
- Niveau
- Intermédiaire
- Conçu pour
- ChatGPT, Claude, Gemini et Microsoft Copilot
- Vérifié sur
- En attente de vérification éditoriale
- Variables
- Champs et règles, Ce qui se passe à l’envoi, Bibliothèque, Styles et Langue des messages
- Langue
- Français
- Prix
- Gratuit, sans inscription
- Mis à jour
- 07/11/2026
Questions fréquentes
Pourquoi valider côté serveur si je valide déjà dans le navigateur ?
Parce que n’importe qui peut contourner le navigateur et envoyer des données directement à ton API. La validation client améliore l’expérience ; la validation serveur protège les données.
Qu’est-ce qui rend un message d’erreur accessible ?
Il est relié au champ par aria-describedby, le champ porte aria-invalid, le texte explique comment corriger et le focus va sur la première erreur à l’envoi.
Puis-je l’utiliser sans React Hook Form ?
Oui. Choisis une autre bibliothèque ou « sans bibliothèque » dans la variable : le prompt adapte le schéma et la gestion de l’état.
À quoi sert ce prompt ?
Générez un formulaire React avec schéma de validation, messages d’erreur accessibles, envoi sécurisé, erreurs serveur par champ et une liste de tests pour le vérifier.
Avec quels outils d'IA fonctionne-t-il ?
Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.
Comment personnaliser le prompt ?
Cliquez sur « Personnaliser » et remplissez les variables (Champs et règles, Ce qui se passe à l’envoi, Bibliothèque, Styles et Langue des messages). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.
Faut-il de l'expérience pour l'utiliser ?
Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.
Ce prompt est-il gratuit ?
Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.
Puis-je me fier au résultat de l'IA ?
Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.