forked from lvbuwei/pgsql-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
isemail.sql
55 lines (55 loc) · 903 Bytes
/
isemail.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
--SELECT is_email('[email protected]');
CREATE OR REPLACE FUNCTION isemail(email text)
RETURNS boolean
AS
$$
BEGIN
return regexp_match($1, $REGEXP$
^
(?<![-!#$%&'*+/=?^_`{|}~@."\]\\a-zA-Zа-яА-ЯёЁ\d])
(?:
[-!#$%&'*+/=?^_`{|}~a-zA-Z\d]+
| "(?:(?:[^"\\]|\\.)+)"
)
(?:
\.
(?:
[-!#$%&'*+/=?^_`{|}~a-zA-Z\d]+
| "(?:[^"\\]|\\.)+"
)
)*
@
(?:
(?:
(?:
(?!-)
(?:
(?:[a-zA-Z\d]|-(?!-)){1,63}
)
(?<!-)
\.
)+
(?:
[a-zA-Z]{2,63}
)
)\M
| (?: #IPv4
(?<!\d)
(?!0+\.)
(?:1?\d\d?|2(?:[0-4]\d|5[0-5]))(?:\.(?:1?\d\d?|2(?:[0-4]\d|5[0-5]))){3}
(?!\d)
)
| \[
(?:
(?<!\d)
(?!0+\.)
(?:1?\d\d?|2(?:[0-4]\d|5[0-5]))(?:\.(?:1?\d\d?|2(?:[0-4]\d|5[0-5]))){3}
(?!\d)
)
\]
)
$
$REGEXP$, 'sx') is not null;
END;
$$
LANGUAGE plpgsql;