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}]+$")