Page 1 sur 1

Caractères autorisés pour les emails

Posté : 07 mars 2006, 13:34
par fque
quels sont les caractères autorisés dans les emails car avec ce petit bout de code il me retourne une erreur sur les emails comportant un "_"
<?php

$tableau = array("[email protected]","[email protected]"); 

foreach ($tableau as $valeur) 
{ 
$pattern = "#^[a-z0-9][-a-z0-9.]*@[-a-z0-9]+\.[-a-z0-9_.]+$#i" ; 
if(preg_match($pattern, $valeur)) 
    echo "$valeur <b style='color:blue'> est un mail correct\n".'</b>'.'<br />' ; 
else 
    echo "$valeur <b style='color:red'> est un mail incorrect\n".'</b>'.'<br />' ; 
} ?>
merci

Posté : 07 mars 2006, 14:10
par Ryle
C'est autorisé dans la partie "login" mais pas dans le nom de domaine :)

Normalement tu as droit à [a-zA-Z0-9_.-] soit [\w.-] pour le login
et [a-zA-Z0-9-] pour le nom de domaine (avant le .)

Si tu veux développer un peu plus, tu as nécessairement une lettre au début du login et du domaine, et de 2 à 4 lettres après le point. A priori ce pattern devrait être complet :

[a-zA-Z][\w.-]*@([a-zA-Z][a-zA-Z0-9-]*\.)+[a-zA-Z]{2,4}

Posté : 07 mars 2006, 14:32
par fque
Cela est-il correct ?
$pattern = "#^[a-zA-Z][\w.-]*@([a-zA-Z0-9-][a-zA-Z0-9-]*\.)+[a-zA-Z]+$#i" ; 

Merci

Posté : 07 mars 2006, 15:30
par Ryle
Ca m'a l'air juste :)

Le "i" final pour ignore case te permet de virer la partie majuscule (et donc simplifier un peu l'expression)
$pattern = "#^[a-z][\w.-]*@([a-z0-9-][a-z0-9-]*\.)+[a-z]+$#i" ;


le + à la place du {2,4} te permet d'avoir de 1 à N lettres dans l'extension du domaine (au lieu de min 2 max 4) , donc un peu moins rigoureux, mais ça marche aussi :)