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

 

 

 

 

 

### PostgreSQL 正则表达式匹配使用方法 在PostgreSQL中,正则表达式提供了一种灵活的方式来进行字符串模式匹配。这种能力超越了传统的`LIKE`和`SIMILAR TO`操作符所提供的功能[^3]。 #### 基本语法 对于简单的字符匹配,可以采用如下形式: ```sql SELECT column_name(s) FROM table_name WHERE column_name ~ 'pattern'; ``` 这里的`~`运算符用于区分大小写的正则表达式匹配;而如果想要忽略大小写,则可选用`~*`运算符[^4]。 #### 实际应用案例 假设有一个名为`users`的数据表,其中包含用户的电子邮箱信息存储于`email`列下。为了筛选出所有以特定域名结尾的邮件地址,比如`example.com`,可以通过下面这条查询语句完成: ```sql SELECT * FROM users WHERE email ~ '@example\.com$'; ``` 此命令会返回所有满足条件——即其电子邮件地址以@example.com结束的记录。注意,在这里使用的转义序列`\.`是为了告诉SQL解析器`.`应该被解释成字面上的小数点而不是任意单个字符。 另外一种情况是当希望找到那些不遵循常见格式但仍然有效的电邮时,可以构建更复杂的正则表达式来适应更多可能性: ```sql SELECT * FROM users WHERE email ~ '^[^@]+@[^@]+\.[^@]+$'; ``` 这段代码片段旨在捕获符合一般互联网邮件格式的所有条目:至少含有一个'@'符号分隔开本地部分与域部分,并且每个部分都不能为空也不应仅由特殊字符组成。 #### POSIX风格扩展 除了基础的功能之外,PostgreSQL还允许运用POSIX类和其他高级特性作为增强版的正则表达式支持。例如,要找出所有姓氏为Smith或Smyth的人名(考虑到可能存在的拼写变化),可以用这样的方式书写查询: ```sql SELECT first_name, last_name FROM persons WHERE last_name ~ '(Sm[iy]th)'; ``` 这表明无论是'Smith'还是'Smyth'都将被认为是符合条件的结果之一[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值