PostgreSQL regex pour valider les adresses e-mail
CREATE OR REPLACE FUNCTION addUploader(INTEGER, TEXT, TEXT) RETURNS TEXT AS $$
DECLARE
u_id ALIAS FOR $1 ;
username ALIAS FOR $2;
email ALIAS FOR $3;
BEGIN
IF email NOT LIKE '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$' THEN
RAISE EXCEPTION 'Wrong E-mail format %', email
USING HINT = 'Please check your E-mail format.';
END IF ;
INSERT INTO uploader VALUES(u_id,username,email);
IF NOT FOUND THEN
RETURN 'Error';
END IF;
RETURN 'Successfully added' ;
EXCEPTION WHEN unique_violation THEN
RAISE NOTICE 'This ID already exists. Specify another one.' ;
RETURN 'Error' ;
END ; $$ LANGUAGE 'plpgsql' ;
SELECT addUploader(25,'test','[email protected]');
Cette expression n'accepte pas l'adresse exacte. Elle doit accepter la [email protected] est également le rejet de toute autre chaîne.
stevengmailcom - rejeté
Tout est rejeté.
Ce que je fais mal?
double possible de Postgres Fonction pour Valider l'Adresse Email
OriginalL'auteur | 2012-04-15
Vous devez vous connecter pour publier un commentaire.
Vous ne l'utilisez pas COMME avec les regexes dans PostgreSQL, vous utilisez le
~
,~*
,!~
et!~*
opérateurs:Si votre test doit ressembler à ceci:
Vous pourriez aussi vouloir traquer une meilleure regex pour les adresses e-mail, "[email protected]" une adresse de courriel valide, mais votre regex ne l'aime pas.
OriginalL'auteur mu is too short
La validation des adresses de courriel est semée d'embûches. Il est beaucoup plus facile de créer une regex qui refuse d'accepter des adresses email valides que celui qui rejette pas valide seulement. Voici la expression rationnelle perl c'est RFC822 conforme:
Mon conseil est de tout accepter, puis utiliser le courriel pour vérifier qu'elle fonctionne. Si vous DEVEZ faire de la validation, puis utiliser le module perl figurant sur cette page et en pl/perl.
OriginalL'auteur Scott Marlowe
Je pense que vous voulez l'un des tilde opérateurs au lieu de
like
.like
a une syntaxe différente (par exemple, il utilise%
au lieu de.*
) composé uniquement de caractères génériques, et ils doivent correspondre à l'ensemble de la chaîne, de sorte que les ancres comme^
et$
ne peut pas être utilisé aveclike
. Personnellement, je pense plus comme fichier d'expansion que le réel motif de correspondance.Tilde exploitants de vous donner une solide regex syntaxe plus proche de egrep, sed et awk.
OriginalL'auteur Tim Pote