2010-08-14 4 views
0

J'ai la partie suivante d'un script de validation:validation côté serveur PHP correspondance d'expression régulière

$invalidEmailError .= "<br/>&raquo;&nbsp;You did not enter a valid E-mail address";  
$match = "/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/"; 

C'est l'expression, voici la validation:

if (!(preg_match($match,$email))) { 
    $errors .= $invalidEmailError; // checks validity of email 
} 

Je pense que c'est assez d'information, laissez-moi savoir si plus est nécessaire.

Fondamentalement, ce qui se passe est le message "Vous n'avez pas entré une adresse de messagerie valide" se fait écho , peu importe ce. Si une adresse e-mail correcte ou une adresse e-mail incorrecte est entrée.

Est-ce que quelqu'un a une idée ou une idée de pourquoi?

EDIT: Je cours cela sur localhost (en utilisant Apache), cela pourrait-il être la raison pour laquelle le preg_match ne fonctionne pas?

Merci! Amit

+1

Voir http://fightingforalostcause.net/misc/2006/compare-email-regex.php – strager

+0

Aussi, pouvez-vous faire écho '$ email' et voir ce qu'il vous donne? – strager

Répondre

3

Votre expression régulière inclut uniquement [A-Z], et non [a-z]. Essayez

$match = "/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i"; 

pour rendre la regex insensible à la casse.

Vous pouvez tester ce live sur http://regexpal.com. Cependant, je vous conseille d'essayer une des expressions sur la page mentionnée par strager: http://fightingforalostcause.net/misc/2006/compare-email-regex.php. Ils ont été perfectionnés au fil du temps et se comporteront probablement mieux. Mais les utilisateurs de Gmail seront satisfaits des vôtres, puisqu'ils pourront utiliser plus aliases qui sont rejetés incorrectement par de nombreux valideurs.

+0

Parfait, cela a fait l'affaire.Je vais marquer cela comme la bonne réponse dès que SO me le permet :) – Amit

0

Vous pouvez toujours essayer de déboguer votre regex en utilisant un outil plus simple (j'adore utiliser Notepad ++ à cet effet) et effectuer des tests itératifs - ie. rendre l'expression plus/moins compliquée et voir si cela fixe/casse les choses.

+0

Merci :) J'utilise Notepad ++ comme éditeur, c'est génial. – Amit

1

Vous avez probablement obtenu l'expression régulière que vous utilisez de regular-expressions.info. Sur cette page, l'auteur déclare (emphase ajoutée):

Si vous voulez utiliser l'expression régulière ci-dessus, il y a deux choses que vous devez comprendre. Premièrement, les expressions régulières longues rendent difficile la mise en forme des paragraphes. Donc, je n'ai inclus a-z dans aucune des trois classes de caractères. Cette regex est destinée à être utilisée avec l'option "insensible à la casse" de votre moteur regex activée. (Vous seriez surpris du nombre de rapports de "bogue" à ce sujet.) Deuxièmement, l'expression régulière ci-dessus est délimitée par des limites de mots, ce qui la rend appropriée pour extraire des adresses électroniques de fichiers ou de gros blocs de texte. Si vous voulez vérifier si l'utilisateur a tapé une adresse e-mail valide, remplacez le mot frontières par des ancres de début de chaîne et de fin de chaîne, comme ceci:^[A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] {2,4} $.

Pour résoudre ce problème, ajoutez l'indicateur i PCRE après votre expression régulière.

+0

Eh bien, voilà, haha. Évidemment, je crains de lire !! Merci d'avoir éclairci ça pour moi. – Amit

Questions connexes