Browse Source

fix zipcode

Looly 5 years ago
parent
commit
c0f1afd709

+ 1 - 0
CHANGELOG.md

@@ -40,6 +40,7 @@
 * 【core   】     修复ZipUtil判断压缩文件是否位于压缩目录内的逻辑有误的问题(issue#1251@Github)
 * 【json   】     修复JSONObject.accumulate问题
 * 【core   】     修复部分xlsx文件sax方式解析空指针问题(issue#1265@Github)
+* 【core   】     修复PatternPool中邮编的正则(issue#1274@Github)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 2 - 2
hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java

@@ -63,9 +63,9 @@ public class PatternPool {
 	public final static Pattern CITIZEN_ID = Pattern.compile("[1-9]\\d{5}[1-2]\\d{3}((0\\d)|(1[0-2]))(([012]\\d)|3[0-1])\\d{3}(\\d|X|x)");
 
 	/**
-	 * 邮编
+	 * 邮编,兼容港澳台
 	 */
-	public final static Pattern ZIP_CODE = Pattern.compile("[1-9]\\d{5}(?!\\d)");
+	public final static Pattern ZIP_CODE = Pattern.compile("^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[0-7]|6[0-7]|7[0-5]|8[0-9]|9[0-8])\\d{4}|99907[78]$");
 	/**
 	 * 生日
 	 */

+ 26 - 0
hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java

@@ -161,4 +161,30 @@ public class ValidatorTest {
 		Assert.assertTrue(Validator.isUUID(IdUtil.randomUUID().toUpperCase()));
 		Assert.assertTrue(Validator.isUUID(IdUtil.fastSimpleUUID().toUpperCase()));
 	}
+
+	@Test
+	public void isZipCodeTest(){
+		// 港
+		boolean zipCode = Validator.isZipCode("999077");
+		Assert.assertTrue(zipCode);
+		// 澳
+		zipCode = Validator.isZipCode("999078");
+		Assert.assertTrue(zipCode);
+		// 台(2020年3月起改用6位邮编,3+3)
+		zipCode = Validator.isZipCode("822001");
+		Assert.assertTrue(zipCode);
+
+		// 内蒙
+		zipCode = Validator.isZipCode("016063");
+		Assert.assertTrue(zipCode);
+		// 山西
+		zipCode = Validator.isZipCode("045246");
+		Assert.assertTrue(zipCode);
+		// 河北
+		zipCode = Validator.isZipCode("066502");
+		Assert.assertTrue(zipCode);
+		// 北京
+		zipCode = Validator.isZipCode("102629");
+		Assert.assertTrue(zipCode);
+	}
 }