在Oracle DB中查询用户姓名是否为中文名的需求. 乍一听很常见. 但是试过了网上各种中文匹配正则如: '^[\u4e00-\u9fa5]+$' 却并不能过滤出中文姓名.
直接说结论:
通过匹配unicode编码无法实现, 直接将unicode转码为对应字符:
--匹配全部由中文组成的姓名
SELECT cust_name FROM ta00_cust WHERE REGEXP_LIKE(cust_name,'^[一-龥]+$');
--姓名包含生僻字
SELECT cust_name FROM ta00_cust WHERE REGEXP_LIKE(cust_name,'[⺀-一龥-﹏]');
简而言之就是选定想要的编码范围如'\u4e00-\u9fa5', 将它转码为'一-龥'即可识别.
转码工具:
在线 Unicode 编码转换 | 菜鸟工具 (runoob.com)
生僻字的unicode编码范围参考: