pgsql,函数,postgresql正则表达式匹配,re,手机号、姓名(包含少数民族)、身份证号

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 integerlanguage plpgsql
as
$$---------------------------------------------
-- 1.长度,2-11
-- 2.无特殊符号及数字、字母,·除外,^[\u4e00-\u9fa5]{0,}$
---------------------------------------------declare
beginif length(name_per) <=1 or length(name_per) >=11 thenreturn 1;elseif replace(name_per,'·','') ~* '^[\u4e00-\u9fa5]{0,}$' thenreturn 0;elsereturn 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正则的转义,字符转义。

 

 

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部