2010-09-01 5 views
0

J'ai un peu de mal à essayer de valider les adresses e-mail en utilisant preg_match (ou eregi() si cela convient mieux). J'ai essayé plusieurs modèles regex maintenant et peu importe ce que je fais, ça ne semble pas fonctionner.PHP - preg_match() et eregi() ne fonctionnent pas?

est ici la fonction:

function validateEmail($email) { 

    if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){ 
     return true; 
    } 

} 

Toutes les idées ce qui ne va pas? J'ai essayé de mettre un point d'exclamation avant le eregi (et preg_match que j'ai utilisé auparavant), et cela a inversé tout (comme prévu) mais ne l'a pas encore fait fonctionner comme il se doit. Je veux qu'il retourne TRUE s'il ne passe pas la regex.

Et je n'ai pas utilisé la même regex quand sur la fonction preg_match, j'en ai trouvé une autre alors, parce que je sais que vous ne pouvez pas vraiment mélanger les deux. Droite?

Merci d'avance!

+0

Ce n'est pas une expression régulière correcte. '[]' ne correspond qu'à un caractère, et '.' est traité comme un caractère spécial correspondant à * n'importe quel caractère *, et pas seulement' .'. Une regex plus correcte pourrait être: '[a-z0-9] + @ [a-z0-9] + \. [A-z] {2,4}', bien que cela soit - comme l'a dit Nikick - trop strict aussi. – Frxstrem

+0

Votre regex ne fonctionne pas non plus, donc je ne pense pas que ce soit la regex qui gâche ça. – Nike

Répondre

8

Vous devez utiliser l'extension de filtre à travers filter_var:

filter_var($email, FILTER_VALIDATE_EMAIL); 

Si vous voulez une expression régulière, ne pas utiliser une règle stricte, ou mon domaine [email protected] sera rejeté. Utilisez quelque chose comme ~[^@][email protected](?:[^.]+\.)+[A-Za-z]{2,6}~. Bien que cela ne permettra toujours pas les courriels valides comme "\@"@example.org.

PS: Si vous voulez savoir pourquoi votre regex ne fonctionne pas:

  • eregi est dépréciée, utilisez preg_match à la place
  • intérieur [] ne pas écrire ||. Utilisez simplement [a-z0-9]. || permettrait simplement en outre le caractère |
  • Vous avez oublié les quantificateurs + partout. Droit sais que chaque partie peut avoir un seul caractère.

Avec toutes ces choses fixes (mais s'il vous plaît ne pas utiliser ce regex!):

preg_match('~[a-z0-9][email protected][a-z0-9]+.[a-z]+~i', $email); 
+0

Je ne savais même pas que ça existait, mais ça sonne bien. Cela ne fonctionne toujours pas pour une raison quelconque. – Nike

+0

Qu'est-ce qui ne fonctionne pas exactement? – NikiC

+0

Il renvoie false, peu importe ce que je saisis. Je peux le laisser vide et soumettre le formulaire, mais il renvoie toujours faux. Même chose si je saisis un email valide.Et si je mets un point d'exclamation avant le preg_match, il inverse l'action et renvoie vrai, peu importe ce que vous soumettez. – Nike

2

Juste pour clarifier certaines choses, ereg est dépréciée.

Pour convertir en preg_match ce serait:

if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){ 

La plupart (j'utilise ce terme vaguement) juste besoin « s ereg délimiteurs (premier et dernier /) ajouté à convertir en preg_match.

+0

Eh bien merci, bon à savoir. :) – Nike