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]');
此正则表达式不接受正确的电子邮件地址.它应该接受[email protected].它也拒绝任何其他字符串.
stevengmailcom – 拒绝
一切都被拒绝了.
我究竟做错了什么?
解决方法
你没有在Postgresql中使用LIKE与正则表达式,你使用
~
,~*
,!~
,and !~*
运算符:
~
Matches regular expression,case sensitive
~*
Matches regular expression,case insensitive
!~
Does not match regular expression,case sensitive
!~*
Does not match regular expression,case insensitive
所以你的测试看起来应该更像这样:
IF email !~ '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$' THEN
您也可能想要查找更好的电子邮件地址正则表达式,“a [email protected]”是一个有效的电子邮件地址,但您的正则表达式不喜欢它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。