pgsql,(Postgresql) 正则匹配查询。
项目中新增的功能,需要对手机号、姓名、身份证号等一些信息进行验证,最好的方法是通过正则表达式来验证,网上查了一些资料,写了这几个工具方法。
pgsql,(Postgresql) 正则匹配查询。
操作符 | 描述 | 例子 |
---|---|---|
~ | 匹配正则表达式,大小写相关 | 'thomas' ~ '.*thomas.*' |
~* | 匹配正则表达式,大小写无关 | 'thomas' ~* '.*Thomas.*' |
!~ | 不匹配正则表达式,大小写相关 | 'thomas' !~ '.*Thomas.*' |
!~* | 不匹配正则表达式,大小写无关 | 'thomas' !~* '.*vadim.*'
|
和 LIKE共同点:模式字符准确地匹配字串字符, 除非在正则表达式语言里有特殊字符。不过正则表达式用的特殊字符和 LIKE 用的不同。
和 LIKE 不同点:正则表达式 可以匹配字串里的任何位置。
pgsql存储过程,pgsql函数。
1:匹配姓名(含少数民族);
验证规则是:姓名由汉字或汉字加“•”、"·"组成,而且,“点”只能有一个,“点”的位置不能在首位也不能在末尾,只有在汉字之间才会验证通过。
正确的匹配到姓名:返回数字0, 状态1和2都是错误的匹配。
create function check_name(name_per text) returns integer
language plpgsql
as
$$
---------------------------------------------
-- 1.长度,2-11
-- 2.无特殊符号及数字、字母,·除外,^[\u4e00-\u9fa5]{0,}$
---------------------------------------------
declare
begin
if length(name_per) <=1 or length(name_per) >=11 then
return 1;
else
if replace(name_per,'·','') ~* '^[\u4e00-\u9fa5]{0,}$' then
return 0;
else
return 2;
end if;
end if;
end;
$$;
alter function check_name(text) owner to postgres;
2:验证手机号(phone number)。
验证规则:第一位只能是1,第二位为3-8中的数字,3-11位为任意的数字。
---------------------------------------------
-- 手机号号段校验,
-- 第1位:1;
-- 第2位:{3、4、5、6、7、8}任意数字;
-- 第3—11位:0—9任意数字
---------------------------------------------
-- ("^1[3|4|5|6|7|8][0-9]\d{8}$");
3:验证身份证号。
验证规则是:由15位数字或18位数字(17位数字加“x”)组成,15位纯数字没什么好说的,18位的话,可以是18位纯数字,或者17位数字加“x”。
---------------------------------------------
-- 1. 验证输入的身份证号是否合法
---------------------------------------------
-- ("(^\d{15}$)|(^\d{17}([0-9]|X)$)");
最后:注意re正则的转义,字符转义。