unicode 中日韩统一表意文字 java正则表达式

unicode 中日韩统一表意文字 java正则表达式

提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!!


unicode 中日韩统一表意文字 java正则表达式


情景:

工作中有对客户姓名进行汉字正则校验 ,之前的校验正则为

name.matches("^[\\u3300-\\u9fa5]+[\\u3300-\\u9fa5_·]*[\\u3300-\\u9fa5]+$")

偶遇客户姓名中包含: 𬀩,上述校验不通过。

百度百科:

UNICODE
𬀩字UNICODE编码U+2C029,10进制: 180265,UTF-32: 0002C029,UTF-8: F0 AC 80 A9。
𬀩字位于中日韩统一表意文字扩充E区(CJK Unified Ideographs Extension E)

解决:

汉字正则表达式 ^ [\u4e00-\u9fa5]{0,}$ 有点过时了,长度大于4位的unicode 正则 需要 \x{h…h} 形式表示

public class PatternUtil {
    private PatternUtil() {}
    public static final String UNIHAN_PATTERN = "^[" +
            "\\u4E00-\\u9FA5" + //1993中日韩统一表意文字
            "\\u3007" + //1个汉字(U+3007,〇),于中日韩符号和标点区
            "\\uFA0E\\uFA0F\\uFA11\\uFA13\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29" + //位于“兼容表意文字区”中但实则独一的汉字
            "\\u3004-\\u4DB5" + //中日韩统一表意文字扩展区A
            "\\x{20000}-\\x{2A6D6}" + //中日韩统一表意文字扩展区B
            "\\u9FA6-\\u9FB3\\u9FB4-\\u9FBB" + //HKSCS-2004中未加入ISO 10646的汉字和GB 18030-2000中未加入ISO 10646的印刷業常用的偏旁和字形部件
            "\\u9FBC-\\u9FC2\\u4039\\u9FC3" + //7个日语汉字,䀹拆分为䀹和鿃
            "\\x{2A700}-\\x{2B734}" + //中日韩统一表意文字扩展区C
            "\\u9FC4-\\u9FCB" + //2个日语用汉字、1个新增汉字、在HKSCS-2004推出后新增的5个香港汉字
            "\\x{2B740}-\\x{2B81D}" + //中日韩统一表意文字扩展区D 其中包括公安部身份证系统人名和地名用字31字
            "\\u9FCC" + //1个汉字(U+9FCC鿌)
            "\\x{2B820}-\\x{2CEA1}" + //中日韩统一表意文字扩展区E
            "\\u9FCD-\\u9FCF\\u4CA4\\u9FD0\\u9FD1-\\u9FD5" + //“急用汉字”:《通用规范汉字表》余下未收入的3个汉字,1个从䲤分离出来的字䲤,5个其他图书用字及化学元素用字
            "\\x{2CEB0}-\\x{2EBE0}" + //中日韩统一表意文字扩展区F
            "\\u9FD6-\\u9FEA" + //21个汉字
            "\\u9FEB-\\u9FEF" + //	5个汉字,前三个是新命名的化学元素用字,后两字来自日本
            "\\x{30000}-\\x{3134A}" + // 中日韩统一表意文字扩展区G
            "\\u9FF0-\\u9FFC\\u4DB6-\\u4DBF" + //急用科学与技术用字、10个需分离的汉字
            "\\x{2A6D7}-\\x{2A6DD}" + //昆曲工尺谱用字
            "\\x{31400}-\\x{33D1F}" + //预计放置小篆
            "\\x{33E00}-\\x{355FF}" + //预计放置甲骨文
            "]{0,}$";
}

java 字符转义不支持直接输入5位的unicode,也不支持大U表示,如需转义表示(通常是字体不支持时)使用Unicode代理对转义 进行test 测试

如\u2b740 需要转换为\uD86D\uDF40

bug修复:

对原有正则校验进行修改,成功解决:

name.matches("^[\\u3300-\\u9fa5\\x{2B820}-\\x{2CEA1}]+[\\u3300-\\u9fa5\\x{2B820}-\\x{2CEA1}_·]*[\\u3300-\\u9fa5\\x{2B820}-\\x{2CEA1}]+$")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript正则表达式Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值