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','steven@gmail.com');
This regex does not accept a correct email address. It should accept steven@gmail.com.It is also rejecting any other string.
stevengmailcom – rejected
Everything is being rejected.
What am i doing wrong?
You don’t use LIKE with regexes in PostgreSQL, you use the
~,~*,!~, and!~*operators:So your test should look more like this:
You also might want to hunt down a better regex for email addresses, “a+b@c.com” is a valid email address but your regex doesn’t like it.