著者: Marc BERLIOUX 日付: To: guilde 題目: Re: [HS] aide expression régulière
Frédéric a écrit : > Remarque qu'il n'est pas interdit d'écrire l'expression sur plusieurs
> lignes, avec des commentaires en face de chacune... Là, c'est quand
> même du délire ! J'espère que la version commenté existe quelque part.. pour pas trop me disperser, je vais partir de cette fonction
qui, même si elle ne tient pas sur une seule ligne,
a le mérite de décomposer le problème :
function checkemail2($email) {
// First, we check that there's one @ symbol, and that the lengths are right
if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
// Email invalid because wrong number of characters in one section, or
wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++) {
if
(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
$local_array[$i])) {
return false;
}
}
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
// Check if domain is IP. If not, it should be valid domain name
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++) {
if
(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$",
$domain_array[$i])) {
return false;
}
}
}
return true;
}
elle refuse encore les adresses comme
"Abc@???, "Fred Bloggs"@???, "Joe.\\Blow"@???
mais elle accepte !#$%&'*+-/=?^_`.{|}~@example.com
net progrès !
une chose me tracasse aussi, c'est qu'il me semblait qu'on avait droit
dans un nom de domaine qu'à un seul '.' et que celui de l'@ de notre
liste <guilde@???> en comporte 2
c'est un boulot à plein temps de vérifier des @ mail !