Validation
argus offre de solides capacités de validation pour garantir que les entrées de ligne de commande répondent aux exigences de votre application.
Aperçu
La validation dans argus est organisée en plusieurs catégories :
- Validateurs intégrés - Validation simple avec
RANGEetCHOICES - Validation par expression régulière - Validation de motifs de chaînes avec PCRE2
- Validateurs personnalisés - Créez votre propre logique de validation
Ce guide couvre les bases de chaque approche. Pour une utilisation avancée, consultez les guides spécialisés référencés tout au long du document.
Validateurs intégrés
argus fournit plusieurs validateurs intégrés pour simplifier les scénarios de validation courants. Ceux-ci peuvent être appliqués directement aux définitions d'options.
Validation de plage
Le validateur RANGE garantit que les valeurs numériques se situent dans une plage spécifiée :
Validation de choix
Le validateur CHOICES garantit que la valeur est l'une d'un ensemble spécifique :
Validation par expression régulière
argus utilise PCRE2 pour une validation puissante par expression régulière :
Motifs prédéfinis
argus inclut de nombreux motifs prédéfinis dans argus/regex.h :
| Constante | Valide | Exemple |
|---|---|---|
ARGUS_RE_EMAIL |
Adresses email | user@example.com |
ARGUS_RE_IPV4 |
Adresses IPv4 | 192.168.1.1 |
ARGUS_RE_URL |
URLs | https://example.com |
ARGUS_RE_ISO_DATE |
Dates au format ISO | 2023-01-31 |
Pour une liste complète, consultez la référence API des expressions régulières.
Pour une utilisation avancée des regex, consultez le guide des expressions régulières.
Validation de longueur
Le validateur LENGTH garantit que les chaînes de caractères ont une longueur appropriée :
OPTION_STRING('u', "username", HELP("Nom d'utilisateur"),
LENGTH(3, 20), // Doit comporter entre 3 et 20 caractères
DEFAULT("utilisateur"))
Validation de nombre d'éléments
Le validateur COUNT garantit que les collections (tableaux et maps) ont un nombre approprié d'éléments :
OPTION_ARRAY_STRING('t', "tags", HELP("Tags pour la ressource"),
COUNT(1, 5), // Doit avoir entre 1 et 5 tags
FLAGS(FLAG_UNIQUE))
Validateurs personnalisés
Pour une logique de validation plus complexe, vous pouvez créer vos propres validateurs :
int even_validator(argus_t *argus, argus_option_t *option, validator_data_t data)
{
if (option->value.as_int % 2 != 0) {
ARGUS_REPORT_ERROR(argus, ARGUS_ERROR_INVALID_VALUE,
"La valeur doit être un nombre pair");
}
return ARGUS_SUCCESS;
}
// Utilisation
OPTION_INT('n', "number", HELP("Un nombre pair"),
VALIDATOR(even_validator, NULL))
int length_pre_validator(argus_t *argus, const char *value, validator_data_t data)
{
size_t min_length = *(size_t *)data.custom;
if (strlen(value) < min_length) {
ARGUS_REPORT_ERROR(argus, ARGUS_ERROR_INVALID_VALUE,
"La chaîne doit comporter au moins %zu caractères", min_length);
}
return ARGUS_SUCCESS;
}
// Utilisation
size_t min_length = 8;
OPTION_STRING('p', "password", HELP("Mot de passe"),
PRE_VALIDATOR(length_pre_validator, &min_length))
Types de validateurs
argus prend en charge deux types de validateurs personnalisés :
- Validateurs - Valident la valeur traitée après conversion vers son type final
- Pré-validateurs - Valident la chaîne brute avant tout traitement
Pour une exploration détaillée des validateurs personnalisés, y compris des exemples et des bonnes pratiques, consultez le guide des validateurs personnalisés.
Combinaison de validateurs
Vous pouvez appliquer plusieurs validateurs à une seule option pour une validation plus complète :
OPTION_INT('p', "port", HELP("Numéro de port"),
RANGE(1, 65535), // Validateur de plage
VALIDATOR(even_validator, NULL), // Validateur personnalisé
DEFAULT(8080))
Rapport d'erreurs
Les validateurs doivent utiliser ARGUS_REPORT_ERROR pour fournir des messages d'erreur clairs :
Exemple de message d'erreur
Les codes d'erreur courants incluent :
- ARGUS_ERROR_INVALID_VALUE : La valeur ne répond pas aux exigences
- ARGUS_ERROR_INVALID_RANGE : Valeur hors de la plage autorisée
- ARGUS_ERROR_INVALID_FORMAT : La valeur a un format incorrect
Exemples complets
Pour des exemples fonctionnels complets de techniques de validation :
Fichiers d'exemple
examples/validators.c- Démontre toutes les techniques de validationexamples/regex.c- Axé sur la validation par expression régulière
Ressources supplémentaires
Pour une couverture plus approfondie des sujets de validation, consultez ces guides avancés :
- Validateurs personnalisés - Création de validateurs personnalisés avec une logique spécialisée
- Expressions régulières - Guide détaillé de la validation par motifs regex
- Motifs regex prédéfinis - Liste des motifs d'expressions régulières prédéfinis dans argus