Skip to content

Commit a60f7de

Browse files
author
huyibing
committed
优化正则
1 parent c1337e4 commit a60f7de

File tree

2 files changed

+40
-33
lines changed

2 files changed

+40
-33
lines changed

server/rarecharacter/src/main/java/com/alipay/rarecharacter/test/NameUtilTest.java

+36-15
Original file line numberDiff line numberDiff line change
@@ -58,27 +58,48 @@ public void codePointTest() {
5858

5959
@Test
6060
public void isAllChineseTest() {
61+
Assert.assertTrue(NameUtil.isAllChinese("\uD87A\uDDF5")); //韦华 unicode
6162
Assert.assertTrue(NameUtil.isAllChinese("张"));
6263
Assert.assertTrue(NameUtil.isAllChinese("张三"));
63-
Assert.assertTrue(NameUtil.isAllChinese("张"));
64-
Assert.assertTrue(NameUtil.isAllChinese("张"));
65-
Assert.assertTrue(NameUtil.isAllChinese("张𮧵"));
66-
Assert.assertTrue(NameUtil.isAllChinese(""));
67-
Assert.assertTrue(NameUtil.isAllChinese(""));
68-
Assert.assertTrue(NameUtil.isAllChinese("𮧵"));
69-
70-
Assert.assertFalse(NameUtil.isAllChinese("张yan"));
71-
Assert.assertFalse(NameUtil.isAllChinese("张1"));
72-
Assert.assertFalse(NameUtil.isAllChinese("张yan"));
73-
Assert.assertFalse(NameUtil.isAllChinese("zhang san"));
64+
Assert.assertTrue(NameUtil.isAllChinese("张是一只小小鸟"));
65+
Assert.assertTrue(NameUtil.isAllChinese("䶮")); //龙天 unicode
66+
Assert.assertTrue(NameUtil.isAllChinese("")); //龙天 pua
67+
Assert.assertTrue(NameUtil.isAllChinese("张\uD87A\uDDF5")); //韦华 unicode
68+
Assert.assertTrue(NameUtil.isAllChinese("")); //韦华pua
69+
Assert.assertTrue(NameUtil.isAllChinese("张𬱖")); //由页 unicode
70+
Assert.assertTrue(NameUtil.isAllChinese("张\uD870\uDF86")); //王莹 unicode
71+
Assert.assertTrue(NameUtil.isAllChinese("张\uD87A\uDDF5")); //韦华 unicode
72+
Assert.assertTrue(NameUtil.isAllChinese("张")); //韦华pua
73+
Assert.assertTrue(NameUtil.isAllChinese("张䶮")); //龙天 unicode
74+
Assert.assertTrue(NameUtil.isAllChinese("张")); //龙天 pua
75+
Assert.assertTrue(NameUtil.isAllChinese("张·麦麦提"));
76+
77+
Assert.assertFalse(NameUtil.isAllChinese("张?"));
78+
Assert.assertFalse(NameUtil.isAllChinese("张?"));
7479
Assert.assertFalse(NameUtil.isAllChinese("张?"));
75-
Assert.assertFalse(NameUtil.isAllChinese(""));
80+
Assert.assertFalse(NameUtil.isAllChinese("张("));
81+
Assert.assertFalse(NameUtil.isAllChinese("张)"));
82+
Assert.assertFalse(NameUtil.isAllChinese("张("));
83+
Assert.assertFalse(NameUtil.isAllChinese("张)"));
84+
Assert.assertFalse(NameUtil.isAllChinese("张{"));
85+
Assert.assertFalse(NameUtil.isAllChinese("张【"));
86+
Assert.assertFalse(NameUtil.isAllChinese("张*"));
87+
Assert.assertFalse(NameUtil.isAllChinese("张&"));
88+
Assert.assertFalse(NameUtil.isAllChinese("张^"));
89+
Assert.assertFalse(NameUtil.isAllChinese("张%"));
90+
Assert.assertFalse(NameUtil.isAllChinese("张$"));
91+
Assert.assertFalse(NameUtil.isAllChinese("张#"));
7692
Assert.assertFalse(NameUtil.isAllChinese("张@"));
7793
Assert.assertFalse(NameUtil.isAllChinese("张!"));
78-
Assert.assertFalse(NameUtil.isAllChinese("张%"));
79-
Assert.assertFalse(NameUtil.isAllChinese("张*"));
80-
Assert.assertFalse(NameUtil.isAllChinese("张`"));
8194
Assert.assertFalse(NameUtil.isAllChinese("张~"));
95+
Assert.assertFalse(NameUtil.isAllChinese("张。"));
96+
Assert.assertFalse(NameUtil.isAllChinese("张,"));
97+
Assert.assertFalse(NameUtil.isAllChinese("张12"));
98+
Assert.assertFalse(NameUtil.isAllChinese("张wei"));
99+
Assert.assertFalse(NameUtil.isAllChinese("张wei3"));
100+
Assert.assertFalse(NameUtil.isAllChinese("张wei3。"));
101+
Assert.assertFalse(NameUtil.isAllChinese("123"));
102+
Assert.assertFalse(NameUtil.isAllChinese("abc"));
82103
}
83104

84105
@Test

server/rarecharacter/src/main/java/com/alipay/rarecharacter/util/NameUtil.java

+4-18
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ public class NameUtil {
2727
* 扩展F (7473个) 2CEB0-2EBE0
2828
* 扩展G (4939个) 30000-3134A
2929
*/
30-
public static final Pattern ALL_CHINESE_PATTERN = Pattern.compile("([\u4e00-\u9fa5]|[\u9fa6-\u9fef]|[\u3400-\u4db5]|[\ue000-\uf8ff]|[\\x{20000}-\\x{2A6D6})] |[\\x{2A700}-\\x{2B734})]|[\\x{2B740}-\\x{2B81D})]|[\\x{2B820}-\\x{2CEA1})]|[\\x{2CEB0}-\\x{2EBE0})]|[\\x{30000}-\\x{3134A})])");
30+
public static final Pattern ALL_CHINESE_PATTERN = Pattern.compile("([\u00B7]|[\u4e00-\u9fa5]|[\u9fa6-\u9fef]|[\u3400-\u4db5]|[\ue000-\uf8ff]|[\\x{20000}-\\x{2A6D6}] |[\\x{2A700}-\\x{2B734}]|[\\x{2B740}-\\x{2B81D}]|[\\x{2B820}-\\x{2CEA1}]|[\\x{2CEB0}-\\x{2EBE0}]|[\\x{30000}-\\x{3134A}])");
3131

3232
/**
33-
* 字符串全部为汉字校验正则
33+
* 字符串全部为汉字校验正则(包括少数民族中圆点)
3434
*/
35-
public static final Pattern STRING_ALL_CHINESE_PATTERN = Pattern.compile("^([\u4e00-\u9fa5]|[\u9fa6-\u9fef]|[\u3400-\u4db5]|[\ue000-\uf8ff]|[\\x{20000}-\\x{2A6D6})] |[\\x{2A700}-\\x{2B734})]|[\\x{2B740}-\\x{2B81D})]|[\\x{2B820}-\\x{2CEA1})]|[\\x{2CEB0}-\\x{2EBE0})]|[\\x{30000}-\\x{3134A})])+$");
35+
public static final Pattern STRING_ALL_CHINESE_PATTERN = Pattern.compile("^([\u00B7]|[\u4e00-\u9fa5]|[\u9fa6-\u9fef]|[\u3400-\u4db5]|[\ue000-\uf8ff]|[\\x{20000}-\\x{2A6D6}] |[\\x{2A700}-\\x{2B734}]|[\\x{2B740}-\\x{2B81D}]|[\\x{2B820}-\\x{2CEA1}]|[\\x{2CEB0}-\\x{2EBE0}]|[\\x{30000}-\\x{3134A}])+$");
3636

3737
/**
3838
* BMP平面汉字正则
@@ -181,7 +181,7 @@ public static boolean isAllChinese(String in) {
181181
if (StringUtils.isBlank(in)) {
182182
return false;
183183
}
184-
return STRING_ALL_CHINESE_PATTERN.matcher(in).find();
184+
return STRING_ALL_CHINESE_PATTERN.matcher(in).matches();
185185
}
186186

187187
/**
@@ -289,20 +289,6 @@ public static boolean isContainOneChinese(String certName) {
289289
return ALL_CHINESE_PATTERN.matcher(certName).find();
290290
}
291291

292-
293-
/**
294-
* 是否包含PINYIN
295-
*
296-
* @param certName
297-
* @return
298-
*/
299-
// public static boolean isContainPinyin(String certName) {
300-
// if (StringUtils.isBlank(certName)) {
301-
// return false;
302-
// }
303-
// return INCLUDE_LETTER_REGEX.matcher(certName).find();
304-
// }
305-
306292
/**
307293
* 是否包含PINYIN
308294
*

0 commit comments

Comments
 (0)