From 20551d89c88997ddea88b12a5258622c1b067bc6 Mon Sep 17 00:00:00 2001 From: "rastapopoulos@spip.org" <> Date: Tue, 16 Nov 2010 16:12:55 +0000 Subject: [PATCH] =?UTF-8?q?V=C3=A9rifier=20une=20valeur=20d=C3=A9cimale,?= =?UTF-8?q?=20y=20compris=20en=20v=C3=A9rifiant=20le=20nombre=20de=20chiff?= =?UTF-8?q?res=20apr=C3=A8s=20la=20virgule.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 ++ lang/verifier_fr.php | 7 +++++- verifier/decimal.php | 51 +++++++++++++++++++++++++++++++++++++++++++ verifier/decimal.yaml | 26 ++++++++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 verifier/decimal.php create mode 100644 verifier/decimal.yaml diff --git a/.gitattributes b/.gitattributes index 5e11c0d..af8db2e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,8 @@ test/verifier.html -text verifier/code_postal.php -text verifier/date.php -text verifier/date.yaml -text +verifier/decimal.php -text +verifier/decimal.yaml -text verifier/email.php -text verifier/email.yaml -text verifier/entier.php -text diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php index 768f622..d331c8a 100644 --- a/lang/verifier_fr.php +++ b/lang/verifier_fr.php @@ -9,6 +9,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_code_postal' => 'Ce code postal est incorrect.', 'erreur_date' => 'La date n\'est pas valide.', 'erreur_date_format' => 'Le format de la date n\'est pas accepté.', + 'erreur_decimal' => 'La valeur doit être un nombre décimal.', + 'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres après la virgule.', 'erreur_email' => 'L\'adresse de courriel <em>@email@</em> n\'a pas un format valide.', 'erreur_email_nondispo' => 'L\'adresse de courriel <em>@email@</em> est déjà utilisée.', 'erreur_entier' => 'La valeur doit être un entier.', @@ -28,6 +30,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_url' => 'L\'adresse n\\\'est pas valide.', // O + 'option_decimal_nb_decimales_label' => 'Nombre de décimales après la virgule', 'option_email_disponible_label' => 'Adresse disponible', 'option_email_disponible_label_case' => 'Vérifier que l\'adresse n\'est pas déjà utilisée par un utilisateur', 'option_email_mode_5322' => 'Vérification la plus conforme aux standards disponibles', @@ -46,11 +49,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'type_date' => 'Date', 'type_date_description' => 'Vérifie que la valeur est une date au format JJ/MM/AAAA. Le séparateur est libre (".", "/", etc).', + 'type_decimal' => 'Nombre à décimal', + 'type_decimal_description' => 'Vérifie que la valeur est un nombre décimal, avec la possibilité de restreindre entre deux valeurs et de préciser le nombre de décimales après la virgule.', 'type_email' => 'Adresse de courriel', 'type_email_description' => 'Vérifie que l\'adresse de courriel a un format correct.', 'type_email_disponible' => 'Disponibilité d\'une adresse de courriel', 'type_email_disponible_description' => 'Vérifie que l\'adresse de courriel n\'est pas déjà utilisé par un autre utilisateur du système.', - 'type_entier' => 'Entier', + 'type_entier' => 'Nombre entier', 'type_entier_description' => 'Vérifie que la valeur est un entier, avec la possibilité de restreindre entre deux valeurs.', 'type_regex' => 'Expression régulière', 'type_regex_description' => 'Vérifie que la valeur correspond au masque demandé. Pour l\'utilisation des masques, reportez-vous à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l\'aide en ligne de PHP</a>.', diff --git a/verifier/decimal.php b/verifier/decimal.php new file mode 100644 index 0000000..92be676 --- /dev/null +++ b/verifier/decimal.php @@ -0,0 +1,51 @@ +<?php + +// Sécurité +if (!defined("_ECRIRE_INC_VERSION")) return; + +/** + * Vérifie qu'un entier cohérent peut être extrait de la valeur + * Options : + * - min : valeur minimale acceptée + * - max : valeur maximale acceptée + * + * @param string $valeur La valeur à vérifier. + * @param array $option Si ce tableau associatif contient une valeur pour 'min' ou 'max', un contrôle supplémentaire sera effectué. + * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. + */ +function verifier_decimal_dist($valeur, $options=array()){ + $erreur = _T('verifier:erreur_decimal'); + + // Pas de tableau ni d'objet + if (is_numeric($valeur) and $valeur == floatval($valeur)){ + // Si c'est une chaine on convertit en flottant + $valeur = floatval($valeur); + $ok = true; + $erreur = ''; + + if (isset($options['min'])) + $ok = ($ok and ($valeur >= $options['min'])); + + if (isset($options['max'])){ + $ok = ($ok and ($valeur <= $options['max'])); + } + + if (!$ok){ + if (isset($options['min']) and isset($options['max'])) + $erreur = _T('verifier:erreur_entier_entre', $options); + elseif (isset($options['max'])) + $erreur = _T('verifier:erreur_entier_max', $options); + else + $erreur = _T('verifier:erreur_entier_min', $options); + } + } + + // On vérifie le nombre de décimales après la virgule + if ($nb_decimales = $options['nb_decimales'] and round($valeur, $nb_decimales) != $valeur){ + $erreur = _T('verifier:erreur_decimal_nb_decimales', array('nb_decimales' => $nb_decimales)); + } + + return $erreur; +} + +?> diff --git a/verifier/decimal.yaml b/verifier/decimal.yaml new file mode 100644 index 0000000..dff9ac4 --- /dev/null +++ b/verifier/decimal.yaml @@ -0,0 +1,26 @@ + +titre: '<:verifier:type_decimal:>' +description: '<:verifier:type_decimal_description:>' +options: + - + saisie: 'input' + options: + nom: 'min' + label: '<:verifier:option_entier_min_label:>' + verifier: + type: 'decimal' + - + saisie: 'input' + options: + nom: 'max' + label: '<:verifier:option_entier_max_label:>' + verifier: + type: 'decimal' + - + saisie: 'input' + options: + nom: 'nb_decimales' + label: '<:verifier:option_decimal_nb_decimales_label:>' + verifier: + type: 'entier' + min: 0 -- GitLab