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 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正则的转义,字符转义。

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值