Bonjour,
je cherche à tester le format d'une adresse email avec une expression régulière
on trouve plein de petits exemples sur le net mais que je trouve souvent incomplet, qui vont par exemple autoriser ceci :
[email protected] (un "souligné' juste avant le arobase)
je souhaiterais prendre en compte tous les cas de figure possible et j'en suis arrivé à ça :
Code : Tout sélectionner
'/^[a-z][a-z0-9]*([.\-_]?[a-z0-9]*)*@[a-z0-9]+([.\-_][a-z0-9]+)*\.([a-z]{2,4})$/i'
ce qui peut sauf erreur de ma part se traduire comme ça :
/*
* 1 caractère alphabétique en début de chaine
* suivi de 0,1 ou plusieurs caractères alphabétiques/chiffre
* éventuellement suivi d'un point, tiret ou souligné, éventuellement suivi d'un ou plusieurs caractères alphabétiques/chiffre, ceci éventuellement plusieurs fois
* arobase @
* au moins 1 caractère alphabétique/chiffre
* éventuellement suivi d'un point, tiret ou souligné alors suivi d'un ou plusieurs caractères alphabétiques/chiffre, ceci éventuellement plusieurs fois
* terminée par un point et 2, 3 ou 4 caractères alphabétiques
*/
comme je ne suis pas un dieu des expressions régulières et qu'on ne peut penser à tout, j'aimerais avoir votre avis et éventuellement des contre-exemples
de plus, je ne suis pas sûr de la validité ou non de certaines formes (ex : un seul caractère devant le @)
voici le code pour tester éventuellement :
// fonction qui vérifie le format d'une adresse email
function verifFormatEmail($email) {
$regex = '/^[a-z][a-z0-9]*([.\-_]?[a-z0-9]*)*@[a-z0-9]+([.\-_][a-z0-9]+)*\.([a-z]{2,4})$/i';
if (!preg_match($regex, $email)) {
return "incorrecte";
}
return "correcte";
}
// jeu de tests
$tabemail[] = "j.company.com";
$tabemail[] = "@company.com";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]_co.uk";
$tabemail[] = "john@labo-company_co.uk";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "john@_labo.company.co.uk";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
$tabemail[] = "[email protected]";
for ($i=0;$i<count($tabemail);$i++) {
echo $tabemail[$i]." => ".verifFormatEmail($tabemail[$i])."<br>";
}
renvoie actuellement ceci :
donc si vous aviez cinq minutes pour regarder ça et donner votre avis ce serait très sympa
merci

Bonjour,
je cherche à tester le format d'une adresse email avec une expression régulière
on trouve plein de petits exemples sur le net mais que je trouve souvent incomplet, qui vont par exemple autoriser ceci :
[email protected] (un "souligné' juste avant le arobase)
je souhaiterais prendre en compte tous les cas de figure possible et j'en suis arrivé à ça :
[code]'/^[a-z][a-z0-9]*([.\-_]?[a-z0-9]*)*@[a-z0-9]+([.\-_][a-z0-9]+)*\.([a-z]{2,4})$/i' [/code]
ce qui peut sauf erreur de ma part se traduire comme ça :
[quote]
/*
* 1 caractère alphabétique en début de chaine
* suivi de 0,1 ou plusieurs caractères alphabétiques/chiffre
* éventuellement suivi d'un point, tiret ou souligné, éventuellement suivi d'un ou plusieurs caractères alphabétiques/chiffre, ceci éventuellement plusieurs fois
* arobase @
* au moins 1 caractère alphabétique/chiffre
* éventuellement suivi d'un point, tiret ou souligné alors suivi d'un ou plusieurs caractères alphabétiques/chiffre, ceci éventuellement plusieurs fois
* terminée par un point et 2, 3 ou 4 caractères alphabétiques
*/[/quote]
comme je ne suis pas un dieu des expressions régulières et qu'on ne peut penser à tout, j'aimerais avoir votre avis et éventuellement des contre-exemples
de plus, je ne suis pas sûr de la validité ou non de certaines formes (ex : un seul caractère devant le @)
voici le code pour tester éventuellement :
[php]
// fonction qui vérifie le format d'une adresse email
function verifFormatEmail($email) {
$regex = '/^[a-z][a-z0-9]*([.\-_]?[a-z0-9]*)*@[a-z0-9]+([.\-_][a-z0-9]+)*\.([a-z]{2,4})$/i';
if (!preg_match($regex, $email)) {
return "incorrecte";
}
return "correcte";
}
// jeu de tests
$tabemail[] = "j.company.com";
$tabemail[] = "@company.com";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]_co.uk";
$tabemail[] = "john@labo-company_co.uk";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "john@_labo.company.co.uk";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
$tabemail[] = "
[email protected]";
for ($i=0;$i<count($tabemail);$i++) {
echo $tabemail[$i]." => ".verifFormatEmail($tabemail[$i])."<br>";
}
[/php]
renvoie actuellement ceci :
[quote]
j.company.com => incorrecte
@company.com => incorrecte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected]_co.uk => correcte
john@labo-company_co.uk => correcte
[email protected] => incorrecte
[email protected] => incorrecte
john@_labo.company.co.uk => incorrecte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => correcte
[email protected] => incorrecte
[email protected] => incorrecte
[email protected] => correcte
[email protected] => correcte
[email protected] => incorrecte
[/quote]
donc si vous aviez cinq minutes pour regarder ça et donner votre avis ce serait très sympa
merci ;)