汉字正则表达式 ^[\u4e00-\u9fa5]{0,}$ 有点过时了
参考wiki:中日韩统一表意文字 :
长度大于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
@Test
public void pattern(){
Assert.isTrue(Pattern.compile(PatternUtil.UNIHAN_PATTERN).matcher("﨏〇鿇鿈鿉鿊鿋㵥鿑鿒鿓鿔鿕" +
"鿃龼龽龾龿鿀䜤鿂龴龵龶龷龸龹龺龻龦龧龨龩龪龫龬龭龮龯龰龱龲龳" +
"﨎﨏﨑﨓﨔﨟﨡﨣﨤﨧﨨﨩鿅鿄鿆鿍鿎鿏䲤䲤鿑鿒鿓鿔鿕\uD86D\uDF40"+
"中華人民共和國臺灣省").matches(),"汉字pattern测试失败");
}