1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| // Contrôle du code postal
function ctl_postcode($postcode, $country='') {
// voir https://fr.wikipedia.org/wiki/Code_postal
$country = strtolower($country);
// Codes à 3 chiffres
if (in_array($country, ['mg'])) $pattern = "#^\d{3}$#";
// Codes à 4 chiffres
if (in_array($country, ['at', 'au', 'az', 'be', 'ch', 'dk', 'fl', 'hu', 'lu', 'md', 'mk', 'ph', 'tn', 'za'])) $pattern = "#^\d{4}$#";
// Codes à 5 chiffres
elseif (in_array($country, ['ba', 'de', 'dz', 'es', 'fi', 'fr', 'gt', 'hr', 'it', 'lk', 'lt', 'ma', 'me', 'my', 'mx', 'rs', 'sa', 'ua'])) $pattern = "#^\d{5}$#";
// Codes à 6 chiffres
elseif (in_array($country, ['by', 'cn', 'co', 'ec', 'in', 'kz', 'kg', 'ro', 'sg', 'uz'])) $pattern = "#^\d{6}$#";
elseif (in_array($country, ['il'])) $pattern = "#^\d{7}$#";
else {
switch ($country) {
case 'ar': // Argentine
$pattern = "#^[A-Z][0-9]{4}[A-Z]{3}$|^[0-9]{4}$#";
break;
case 'bj': // Bénin
$pattern = "#^\d{2}[A-Z]{2}\d{4}$#";
break;
// Brésil + Cambodge CCCCC-CCC
case 'br':
case 'kh':
$pattern = "#^\d{5}\-\d{3}$#";
break;
case 'ca':
$pattern = "#^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[ -]{1}[0-9]{1}[a-zA-Z]{1}[0-9]{1}$#";
break;
case 'gb':
$pattern = "#^[A-Z]{1,2}[A-Z0-9]?[0-9] [0-9][A-Z]{2}$#";
break;
// CCC CC
case 'gr':
case 'se':
case 'sk':
case 'cz':
$pattern = "#^\d{3} \d{2}#";
break;
case 'ht': // Haïti
$pattern = "#^HT-\d{4}#";
break;
case 'ie':
$pattern = "#^[A-Z][0-9][A-Z0-9] [A-Z][0-9]{3}$#";
break;
case 'jp':
$pattern = "#^[0-9]{3}-[0-9]{4}$#";
break;
case 'nl':
$pattern = "#^[1-9][0-9]{3} [A-B]{2}$#";
break;
case 'pl': // Pologne CC-CCC
$pattern = "#^[0-9]{2}-[0-9]{3}$#";
break;
case 'pt': // Portugal CCCC-CCC
$pattern = "#^[0-9]{4}-[0-9]{3}$#";
break;
case 'us':
$pattern = "#^\d{5}([ -][0-9]{4})?$#";
// (^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)
break;
case 'ta':
$pattern = "#^[1-9]{1}[0-9]{2}$#";
break;
default:
return true;
break;
}
}
if (preg_match($pattern, $postcode)) return true;
else return false;
} |
Partager