[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / verifier / verifier / code_postal.php
diff --git a/www/plugins/verifier/verifier/code_postal.php b/www/plugins/verifier/verifier/code_postal.php
new file mode 100644 (file)
index 0000000..90705cf
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Un code postal francais est compose de 5 chiffres
+ * http://fr.wikipedia.org/wiki/Code_postal_en_France
+ * a completer pour d'autre pays
+ * 
+ * cf : http://fr.wikipedia.org/wiki/Codes_postaux
+ * 
+ * La regexp par défaut doit valider toutes les possibilités
+ * -* combinaisons de chiffres et de lettres et aussi tiret
+ * -* notations internationales cf : http://en.wikipedia.org/wiki/List_of_postal_codes#On_the_use_of_country_codes
+ * 
+ * @param string $valeur
+ *   La valeur à vérifier.
+ * @param array $options
+ *   pays => code pays
+ * @return string
+ *   Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
+ */
+function verifier_code_postal_dist($valeur, $options=array()){
+       $erreur = _T('verifier:erreur_code_postal');
+       if (!is_string($valeur))
+               return $erreur;
+
+       $ok = '';
+       switch ($options['pays']){
+               case 'FR':
+                       if (!preg_match(",^((0[1-9])|([1-8][0-9])|(9[0-8]))[0-9]{3}$,", $valeur))
+                               return $erreur;
+                       break;
+               case 'DZ':// Algérie
+               case 'DE':// Allemagne
+               case 'BY':// Bielorussie
+               case 'BA':// Bosnie Herzégovine
+               case 'HR':// Croatie
+               case 'ES':// Espagne
+               case 'FI':// Finlande
+               case 'GT':// Guatemala
+               case 'IT':// Italie
+               case 'LT':// Lituanie
+               case 'MY':// Malaisie
+               case 'MA':// Maroc
+               case 'MX':// Mexique
+               case 'ME':// Montenegro
+               case 'LK':// Sri lanka
+               case 'MX':// Mexique
+               case 'UA':// Ukraine
+                       // 5 chiffres
+                       if (!preg_match(",^[0-9]{5}$,", $valeur))
+                               return $erreur;
+                       break;
+               default:
+                       if (!preg_match('/^[A-Z]{1,2}[-|\s][0-9]{3,6}$|^[0-9]{3,6}$|^[0-9|A-Z]{2,5}[-|\s][0-9|A-Z]{2,4}$|^[A-Z]{1,2} [0-9|A-Z]{2,5}[-|\s][0-9|A-Z]{2,4}/i',$valeur))
+                               return $erreur;
+                       break;
+       }
+
+       return $ok;
+}