Valider 348b685e rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Refactoring de la verification des numeros de telphone :

- on peut passer une option format = mobile, fixe ou all (par defaut) pour verifier specifiquement qu'un numero est un numero de fixe ou de mobile (si on sait le faire pour le pays concerne)
- les fonctions de verification par pays prennent un argument option en plus
- une fonction generique verifier_telephone_pays_patterns() qui prend les patterns connus selon les format (all, fixe, mobile) et le numero a verifier + les options eventuelles
- les fontions par pays sont refactorees pour utiliser cette fontion generique
- on ajoute la regexp mobile la ou elle manquait

+ compat SPIP 3.3
parent 99fa0dea
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="verifier"
	categorie="outil"
	version="1.10.0"
	version="1.11.0"
	etat="stable"
	compatibilite="[2.0.10;3.2.*]"
	compatibilite="[2.0.10;3.3.*]"
	logo="images/verifier-128.png"
	documentation="https://contrib.spip.net/Verifier"
>
+92 −19
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -53,7 +53,12 @@ function verifier_telephone_dist($valeur, $options = array()) {
	// si on connait le pays (par option ou par indicatif) et qu'on a une fonction de verification pour ce pays on utilise
	$pays = (isset($options['pays']) ? strtolower($options['pays']) : null);
	if ($pays and $verifier_telephone_pays = charger_fonction('telephone_pays_' . $options['pays'], 'verifier', true)) {
		if ($e = $verifier_telephone_pays($tel, $erreur)) {

		$option_verif_pays = [];
		if (isset($options['format'])) {
			$option_verif_pays['format'] = $options['format'];
		}
		if ($e = $verifier_telephone_pays($tel, $erreur, $option_verif_pays)) {
			return $e;
		}
		return $ok;
@@ -82,30 +87,98 @@ function verifier_telephone_prefixes_pays_dist() {
	return $indicatifs;
}

/**
 * Verification generique
 * @param array $patterns
 *   liste des regexp en fonction du format : fixe, mobile, all
 * @param string $tel
 *   le numero a verifier
 * @param string $message_erreur_defaut
 * @param array $options
 * @return string
 */
function verifier_telephone_pays_patterns($patterns, $tel, $message_erreur_defaut, $options = array()) {
	$format = isset($options['format']) ? $options['format'] : 'all';

	foreach (['fixe', 'mobile', 'all'] as $format_test) {
		// si on a pas trouve pattern pour le format demande, on finira par le test 'all'
		if ($format === $format_test or $format_test === 'all'){

function verifier_telephone_pays_ch_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(0|\+41)[0-9]{9}$/', $tel)) {
			// si on a une regexp pour ce format, il faut et il suffit de la matcher
			if (isset($patterns[$format])) {
				if (!preg_match($patterns[$format], $tel)){
					return $message_erreur_defaut;
				}
				return '';
			}

function verifier_telephone_pays_es_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(\+34)?[69][0-9]{8}$/', $tel)) {
			// sinon il faut au moins matcher la regexp 'all' si elle est fournie :
			if (isset($patterns['all'])) {
				if (!preg_match($patterns['all'], $tel)){
					return $message_erreur_defaut;
				}
				// si on voulait un numero generique, on est bon
				if ($format_test === 'all') {
					return '';
				}
			}

function verifier_telephone_pays_fr_dist($tel, $message_erreur_defaut) {
	if (!preg_match('/^(0|\+33)[1-9][0-9]{8}$/', $tel)) {
			// regarder si on matche un autre des formats connus :
			$has_other_match = false;
			foreach ($patterns as $what => $pattern){
				if (!in_array($what, [$format, 'all']) and preg_match($pattern, $tel)){
					$has_other_match = $what;
				}
			}
			// si on est en train de tester all : il faut qu'un des format connu matche
			if ($format_test === 'all') {
				if ($has_other_match === false) {
					return $message_erreur_defaut;
				}
			}

function verifier_telephone_pays_be_dist($tel, $message_erreur_defaut) {
	// Patterns
	$pattern = '/^(0|\+32)[0-9]{8}$/';
	$pattern_mobile = '/^(0|\+32)4(60|[789]\d)[0-9]{6}$/';
	if (!preg_match($pattern, $tel) and !preg_match($pattern_mobile, $tel)){
			// sinon il faut qu'aucun des autres formats connus ne matche
			else {
				if ($has_other_match !== false) {
					return $message_erreur_defaut;
				}
			}
			// et donc on doit etre bon (ou en tout cas on a fait de notre mieux)
			return '';
		}
	}
	return '';
}


function verifier_telephone_pays_ch_dist($tel, $message_erreur_defaut, $options = array()) {
	$patterns = [
		'all' => '/^(0|\+41)[0-9]{9}$/',
		'mobile' => '/^(0|\+41)7[5-9][0-9]{7}$/',
	];
	return verifier_telephone_pays_patterns($patterns, $tel, $message_erreur_defaut, $options);
}

function verifier_telephone_pays_es_dist($tel, $message_erreur_defaut, $options = array()) {
	$patterns = [
		'all' => '/^(\+34)?[69][0-9]{8}$/',
		'mobile' => '/^(\+34)?[6][0-9]{8}$/',
	];
	return verifier_telephone_pays_patterns($patterns, $tel, $message_erreur_defaut, $options);
}

function verifier_telephone_pays_fr_dist($tel, $message_erreur_defaut, $options = array()) {
	$patterns = [
		'all' => '/^(0|\+33)[1-9][0-9]{8}$/',
		'mobile' => '/^(0|\+33)[6-7][0-9]{8}$/',
	];
	return verifier_telephone_pays_patterns($patterns, $tel, $message_erreur_defaut, $options);
}

function verifier_telephone_pays_be_dist($tel, $message_erreur_defaut, $options = array()) {
	// Patterns
	$patterns = [
		'fixe' => '/^(0|\+32)[0-9]{8}$/',
		'mobile' => '/^(0|\+32)4(60|[789]\d)[0-9]{6}$/',
	];
	return verifier_telephone_pays_patterns($patterns, $tel, $message_erreur_defaut, $options);
}
 No newline at end of file