Validation

FormKit rend la validation côté client simple en vous permettant de déclarer vos règles de validation directement sur vos entrées. Il est facile d'écrire des règles personnalisées aussi, mais vous en aurez rarement besoin avec plus de 20 règles prêtes à l'emploi.

Déclaration des règles

Comment valider une entrée - Cours Vue School

8 mins

Déclarer quelles règles de validation s'appliquent à une entrée donnée est aussi simple que de fournir une propriété validation. Les règles peuvent être déclarées en utilisant deux syntaxes :

Syntaxe de chaîne

Les règles de validation peuvent être déclarées en spécifiant chaque nom de règle souhaité séparé par des barres verticales |. Certaines règles peuvent également accepter des arguments, qui peuvent être fournis après un deux-points :. Vous pouvez utiliser plusieurs arguments en les séparant par des virgules :

Charger l'exemple en direct

Syntaxe de tableau

Les règles de validation peuvent également être déclarées en fournissant un tableau. Chaque élément du tableau doit être lui-même un tableau où le premier élément est le nom de la règle de validation en chaîne, et les n éléments restants sont des arguments pour cette règle.

Cela est particulièrement utile si les arguments fournis doivent être de véritables types JavaScript — par exemple, une expression régulière (regex) :

Charger l'exemple en direct

Affichage des erreurs

Les règles de validation sont toujours calculées en temps réel — ce qui signifie qu'un champ donné sera toujours valide ou invalide (il est considéré comme invalide en attendant l'exécution des règles de validation asynchrones). Cependant — la visibilité des erreurs de validation est déterminée par la propriété validation-visibility.

VisibilitéDescription
blur(Par défaut) Les erreurs sont affichées après qu'un utilisateur retire le focus d'une entrée.
liveLes erreurs sont toujours visibles.
dirtyLes erreurs sont affichées après qu'un utilisateur modifie la valeur d'une entrée.
submitLes erreurs sont affichées uniquement après qu'un utilisateur tente de soumettre un formulaire.
Soumission de formulaire

Si une entrée est à l'intérieur d'un formulaire, alors tous les messages de validation restants seront affichés à l'utilisateur final lorsque celui-ci tente de soumettre le formulaire.

Définir la visibilité de la validation pour un groupe entier

Grâce à l'héritage de configuration de FormKit, vous pouvez définir validation-visibility au niveau d'un form, group, ou list en utilisant la propriété config, que vous pouvez toujours remplacer pour chaque entrée individuellement :

Charger l'exemple en direct

Indices de règles

Aperçu des indices de règles de validation

2 mins

Les règles de validation fonctionnent selon quelques caractéristiques par défaut, que vous pouvez modifier au cas par cas avec des "indices de règles" :

  • Exécutées en séquence - les règles sont exécutées dans l'ordre où elles sont déclarées. Lorsqu'une règle échoue, les règles restantes ne sont pas exécutées. Par exemple, si vous déclarez les règles de validation comme required|length:5, alors la règle length ne s'exécutera pas tant que la règle required n'est pas validée.
  • Ignorées si vide - Les règles de validation ne sont pas exécutées lorsque l'entrée est vide (parmi les règles disponibles, la règle required est la seule exception).
  • Synchrone - toutes les règles disponibles sont synchrones et ne sont pas temporisées.
  • Bloquantes - toutes les règles de validation produisent des messages bloquants qui empêchent la soumission du formulaire.

Les caractéristiques ci-dessus peuvent être modifiées lors de la déclaration de vos règles en utilisant des "indices". Les indices de règles sont de petits caractères modificateurs que vous ajoutez au début d'une déclaration de règle pour changer son comportement par défaut :

IndiceNomDescription
(200)TemporisationTemporise la règle de validation par le nombre de millisecondes indiqué.
+VideExécute la règle de validation même si l'entrée est vide (mais ne force pas la règle).
*ForceExécute la règle de validation même si une règle précédente a échoué.
?OptionnelRend une règle de validation optionnelle (elle est non-bloquante, ce qui signifie que le formulaire peut toujours être soumis).

Temporisation (milli)

Il est parfois judicieux de temporiser vos règles de validation. Pour ce faire, utilisez l'indice de temporisation — une parenthèse contenant une durée en millisecondes — avant votre règle :

Charger l'exemple en direct

+ Vide

Parfois, vous souhaitez qu'une règle de validation s'exécute même lorsque une entrée est vide. Vous pouvez utiliser l'indication + vide pour cela :

Charger l'exemple en direct

Forcer *

L'indication de force assure qu'une règle de validation s'exécutera même si une règle définie avant elle échoue (note : cela ne signifie pas qu'elle s'exécutera lorsque une entrée est vide). Remarquez comment cet exemple affichera les deux messages length et email :

Charger l'exemple en direct

Optionnel ?

L'indication optionnelle permet à une règle de validation échouée de ne pas empêcher la soumission du formulaire. Dans cet exemple, remarquez comment le formulaire ne sera pas soumis si les règles required ou confirm échouent, mais il sera soumis si la règle length indiquée comme optionnelle échoue :

Charger l'exemple en direct
Combiner les indications

Vous pouvez utiliser les indications de règles ensemble. Pour ce faire, placez simplement plusieurs indications avant la déclaration de la règle : required|*+(200)min:10.

Règles disponibles

FormKit est livré avec plus de 20 règles de validation prêtes à l'emploi, couvrant la plupart des besoins de validation. Si vous ne trouvez pas celle qui répond à votre exigence exacte, vous pouvez ajouter une règle personnalisée pour répondre à vos besoins.

Accepted

La valeur doit être yes, on, 1 ou true. Utile pour les entrées de type case à cocher — souvent là où vous devez valider si quelqu'un a accepté les termes.

Charger l'exemple en direct

Alpha

Vérifie si une valeur contient uniquement des caractères alphabétiques. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù ou ś.

Charger l'exemple en direct

Alphanumérique

Vérifie si une valeur est uniquement composée de caractères alphabétiques ou de chiffres numériques. Pour la partie alphabétique, vous pouvez passer default ou latin - voir alpha ci-dessus.

Charger l'exemple en direct

Alpha-espaces

Vérifie si une valeur est uniquement composée de caractères alphabétiques ou d'espaces. Pour la partie alphabétique, vous pouvez passer default ou latin - voir alpha ci-dessus.

Charger l'exemple en direct

Entre

Vérifie si un nombre est (inclusivement) entre deux autres nombres. La valeur entrée doit être un nombre, sinon la règle de validation échouera.

Charger l'exemple en direct

Confirmer

Vérifie si la valeur d'une entrée correspond à la valeur d'une autre entrée — souvent utilisé pour les confirmations de mot de passe. Il y a deux façons de spécifier quelle entrée doit correspondre :

  • Ajouter _confirm à l'attribut name de la seconde entrée.
  • Passer le name de la première entrée comme argument à la règle de confirmation dans la seconde entrée confirm:name_of_input_1 (plus spécifique).

Note : les deux entrées doivent être dans le même group ou form.

Charger l'exemple en direct

Contient Alpha

Vérifie si une valeur contient des caractères alphabétiques. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù ou ś.

Charger l'exemple en direct

Contient Alphanumérique

Vérifie si une valeur contient des caractères alphabétiques ou des chiffres numériques. Pour la partie alphabétique, vous pouvez passer default ou latin - voir contient alpha ci-dessus.

Charger l'exemple en direct

Contient des Alphaspaces

Vérifie si une valeur contient des caractères alphabétiques ou des espaces. Pour la partie alphabétique, vous pouvez passer default ou latin - voir contient alpha ci-dessus.

Charger l'exemple en direct

Contient des Minuscules

Vérifie si une valeur contient un caractère en minuscule. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù, ou ś.

Charger l'exemple en direct

Contient des Chiffres

Vérifie si une valeur contient un chiffre.

Charger l'exemple en direct

Contient des Symboles

Vérifie si une valeur contient un symbole.

Charger l'exemple en direct

Contient des Majuscules

Vérifie si une valeur contient un caractère en majuscule. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù, ou ś.

Charger l'exemple en direct

Date après

Détermine si une date est postérieure à la date actuelle ou à une date fournie en argument de la règle. Les dates utilisées peuvent être des objets Date de JavaScript ou des chaînes qui peuvent être analysées par Date.parse().

Charger l'exemple en direct

Date avant

Détermine si une date est antérieure à la date actuelle ou à une date fournie en argument de la règle. Les dates utilisées peuvent être des objets Date de JavaScript ou des chaînes qui peuvent être analysées par Date.parse().

Charger l'exemple en direct

Date entre

Détermine si une date se situe entre (et inclut) les deux dates fournies en arguments de la règle. Les dates utilisées peuvent être des objets Date de JavaScript ou des chaînes qui peuvent être analysées par Date.parse().

Charger l'exemple en direct

Format de date

Assurez-vous que le format de la date saisie correspond à un format de date spécifique. Le format doit être spécifié en utilisant les jetons de formatage suivants :

JetonValeurs valides
MMReprésentation du mois sur deux chiffres (01-12)
MReprésentation du mois sur un chiffre (1-12), zéro autorisé
DDJour du mois sur deux chiffres (01-31)
DJour du mois sur un chiffre (1-31), zéro autorisé
YYAnnée sur deux chiffres
YYYYAnnée sur quatre chiffres
warning

Les champs de date natifs produisent toujours le même format YYYY-MM-DD ... même s'ils affichent les dates selon la locale du navigateur. Utiliser cette règle pour spécifier un format différent résulterait en un champ qui ne pourrait jamais être valide.

Charger l'exemple en direct

Email

Vérifie si le champ contient une adresse email valide.

Charger l'exemple en direct

Se termine par

Vérifie si la valeur du champ se termine par une sous-chaîne donnée.

Charger l'exemple en direct

Est

Vérifie que la valeur du champ correspond à au moins un des arguments fournis.

Charger l'exemple en direct

Longueur

Vérifie que la valeur du champ dépasse une longueur donnée, ou se situe entre deux valeurs de longueur. Cela fonctionne pour valider des tableaux (comme les listes), des objets (comme les groupes), ou des longueurs de chaînes de caractères. Peut être utilisé pour simuler les attributs natifs maxlength et minlength également.

Charger l'exemple en direct

Minuscules

Vérifie si une valeur est composée uniquement de caractères minuscules. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù, ou ś.

Charger l'exemple en direct

Correspond

Vérifie si l'entrée correspond à une valeur ou un motif particulier. Si vous passez plusieurs arguments, il vérifie chacun jusqu'à ce qu'une correspondance soit trouvée.

Charger l'exemple en direct

Au lieu de passer des chaînes de caractères dans la propriété de validation pour une correspondance simple, vous pouvez formater votre argument avec des barres obliques / pour passer votre propre expression régulière.

Charger l'exemple en direct

Lorsque vous utilisez la Syntaxe de chaîne, vous ne pouvez pas échapper aux caractères utilisés pour définir les règles de validation elles-mêmes (|,:). Pour utiliser ces caractères dans vos expressions régulières, vous devez utiliser l'alternative Syntaxe de tableau.

Charger l'exemple en direct

Max

Vérifie qu'un Number est inférieur ou égal à une valeur maximale. La valeur maximale par défaut est 10.

Charger l'exemple en direct

Vous pouvez également utiliser cette règle pour valider que la longueur d'un Array est inférieure ou égale à une valeur maximale.

Charger l'exemple en direct

Min

Vérifie qu'un Number est supérieur ou égal à une valeur minimale. La valeur minimale par défaut est 1.

Charger l'exemple en direct

Vous pouvez également utiliser cette règle pour valider que la longueur d'un Array est supérieure ou égale à une valeur minimale.

Charger l'exemple en direct

Not

Vérifie pour s'assurer que les données saisies ne correspondent pas à un ensemble de valeurs prédéfinies.

Charger l'exemple en direct

Number

Vérifie si l'entrée est un nombre valide évalué par isNaN().

Charger l'exemple en direct

Required

Vérifie si l'entrée est vide.

Charger l'exemple en direct

Si vous ne voulez pas que les espaces blancs permettent à la règle required d'être validée, vous pouvez passer trim comme argument à la règle :

Charger l'exemple en direct

Require One

Vérifie plusieurs entrées et valide si l'une d'elles a une valeur.

Note : les deux entrées doivent être dans le même group ou form.

Charger l'exemple en direct

Starts With

Vérifie si l'entrée commence par l'une des options fournies.

Charger l'exemple en direct

Symbol

Vérifie si une valeur est composée uniquement de symboles.

Charger l'exemple en direct

Uppercase

Vérifie si une valeur est composée uniquement de caractères majuscules. Il existe deux ensembles de caractères : latin et par défaut. Les caractères latins sont strictement [a-zA-Z], tandis que l'ensemble par défaut inclut la plupart des caractères accentués, tels que ä, ù, ou ś.

Charger l'exemple en direct

URL

Vérifie si la valeur saisie semble être une URL correctement formatée, y compris le protocole. Cela ne vérifie pas si l'URL est réellement résolue.

Charger l'exemple en direct

Règles personnalisées

Les règles de validation sont des fonctions qui acceptent un nœud central et retournent une valeur booléenne — true pour un succès et false pour un échec. De plus, tous les arguments passés à la règle de validation sont disponibles en tant qu'arguments 1-n. Écrire la vôtre est simple — par exemple :

/**
 * Fichier : my-custom-rules/monday.js
 *
 * Une règle de validation artificielle qui assure que la valeur saisie est lundi ou lun.
 */
const monday = function (node) {
  return node.value === 'monday' || node.value === 'mon'
}

export default monday

Définir les comportements des règles personnalisées

Comme mentionné dans la section astuces pour les règles de validation, les règles de validation — y compris vos règles personnalisées — fonctionnent selon des comportements par défaut : elles s'exécutent en séquence, sont ignorées lorsque la valeur de l'entrée est vide, sont synchrones et bloquantes. Si vous souhaitez que les comportements par défaut de votre règle fonctionnent différemment, vous pouvez les remplacer sur votre règle de validation personnalisée :

/**
 * Une règle de validation artificielle qui assure que la valeur saisie est lundi ou lun.
 */
const monday = function (node) {
  return node.value === 'monday' || node.value === 'mon'
}

// remplacer les comportements par défaut de la règle pour votre règle personnalisée
monday.blocking = false
monday.skipEmpty = false
monday.debounce = 20 // millisecondes
monday.force = true

export default monday

Vous pouvez également remplacer ces comportements au cas par cas avec les astuces pour les règles de validation.

Une fois que vous avez écrit une fonction de validation — vous devez enregistrer la règle de validation avec FormKit — soit globalement, soit spécifiquement sur une entrée.

Règles de validation pour plusieurs entrées

Les règles de validation peuvent dépendre des valeurs d'autres entrées dans l'arborescence de votre formulaire. Pour ce faire, utilisez la traversée de nœuds pour localiser un autre nœud et accéder à sa valeur :

Charger l'exemple en direct
Fonctions pures

Les règles de validation doivent toujours être des fonctions pures. Utilisez uniquement les arguments passés et ne réalisez aucun effet de bord.

Ajouter une règle globalement

Pour utiliser une règle de validation n'importe où dans votre projet, vous pouvez la spécifier là où votre plugin FormKit est enregistré avec Vue.

import { createApp } from 'vue'
import App from './App.vue'
import { plugin, defaultConfig } from '@formkit/vue'
import monday from './my-custom-rules/monday'

// prettier-ignore
createApp(App).use(plugin, defaultConfig({
  rules: { monday },
})).mount('#app')

Une fois installée, vous pouvez utiliser votre règle de validation n'importe où dans votre projet.

<FormKit validation="required|monday" />

Pour personnaliser le message d'erreur qui apparaît lorsque votre validation personnalisée échoue, suivez les instructions ici.

Ajouter une règle via la prop

Pour ajouter une validation à un champ spécifique, utilisez la prop validation-rules.

Charger l'exemple en direct
Message personnalisé

Vos règles personnalisées nécessitent probablement un message personnalisé — la section suivante de la documentation couvrira cela.

Messages personnalisés

Il existe plusieurs façons de personnaliser votre message de validation. La plus simple est d'utiliser la prop validation-label — vous permettant de changer le nom du champ tel qu'il est utilisé dans les messages de validation prédéfinis.

Charger l'exemple en direct

Si vous avez besoin d'être plus spécifique, vous avez deux options :

  • Remplacer le message d'une règle en utilisant une prop.
  • Remplacer globalement le message d'une règle de validation.

Prop de message de validation

Vous pouvez facilement remplacer les messages de validation directement sur votre champ FormKit en fournissant un objet de chaînes de caractères ou de fonctions.

Utilisation de chaînes de caractères

Pour remplacer un message de validation sur un seul champ FormKit, ajoutez la prop validation-messages avec un objet de noms de règles et un message correspondant.

Charger l'exemple en direct

Utilisation de fonctions

Si vous avez besoin de plus de puissance pour vos règles de validation, vous pouvez utiliser une fonction au lieu d'une chaîne de caractères. La fonction reçoit un objet contexte.

Objet contexte de message de validation :
ComportementDescription
argsUn tableau d'arguments passés à la règle. Par exemple 'Vue', 'React', 'Angular' de la règle is:Vue,React,Angular.
nameLe nom du champ (premier disponible parmi : validation-label, label, puis name).
nodeLe noeud central node de FormKit.

Réécrivons l'exemple ci-dessus en utilisant une fonction au lieu d'une chaîne de caractères pour encore plus de contrôle sur la prop validation-messages :

Charger l'exemple en direct

Message de validation global

Si vous souhaitez remplacer (ou ajouter) des messages de règles de validation dans l'ensemble de votre projet, vous pouvez définir ces règles de messages lors de l'enregistrement de FormKit sous la clé de langue que vous souhaitez remplacer :

import { createApp } from 'vue'
import App from './App.vue'
import { plugin, defaultConfig } from '@formkit/vue'
import monday from './my-custom-rules/monday'

// prettier-ignore
createApp(App).use(plugin, defaultConfig({
  messages: {
    fr: {
      validation: {
        required({ name }) {
          return `Veuillez remplir le champ ${name}.`
        }
      }
    }
  }
})).mount('#app')

Déplacer les messages de validation

Si vous souhaitez afficher les messages de validation d'un champ en dehors du composant <FormKit />, vous pouvez utiliser le composant <FormKitMessages /> en passant le nœud du champ en tant que prop. L'utilisation de ce composant désactive l'affichage par défaut des messages (situés sous le champ) et les déplace là où se trouve le composant <FormKitMessages /> :

Charger l'exemple en direct

Extraire les messages

Le composant <FormKitSummary>

FormKit 1.0.0 a introduit le composant FormKitSummary qui offre une solution "clé en main" pour afficher tous les messages de validation dans un formulaire donné ou un sous-arbre.

Pour obtenir tous les messages de validation du nœud central d'un champ, vous pouvez utiliser la fonction getValidationMessages exportée depuis @formkit/validation. Cette fonction vérifiera de manière récursive le nœud donné et tous ses enfants pour les messages de validation et retournera une Map des nœuds centraux aux messages de validation, ce qui la rend idéale pour une utilisation avec des formulaires :

Charger l'exemple en direct