diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/RegexPool.java b/hutool-core/src/main/java/cn/hutool/core/lang/RegexPool.java index e0519d223..c17678b64 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/RegexPool.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/RegexPool.java @@ -78,7 +78,7 @@ public interface RegexPool { /** * 座机号码 */ - String TEL = "0\\d{2,3}-[1-9]\\d{6,7}"; + String TEL = "(010|02\\d|0[3-9]\\d{2})-?(\\d{6,8})"; /** * 座机号码+400+800电话 * diff --git a/hutool-core/src/main/java/cn/hutool/core/util/PhoneUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/PhoneUtil.java index 21187a9a6..fda019702 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/PhoneUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/PhoneUtil.java @@ -161,4 +161,28 @@ public class PhoneUtil { public static CharSequence subAfter(CharSequence phone) { return StrUtil.sub(phone, 7, 11); } + + /** + * 获取固话号码中的区号 + * + * @param value 完整的固话号码 + * @return 固话号码的区号部分 + * @since 5.7.6 + */ + public static CharSequence subTelBefore(CharSequence value) + { + return ReUtil.getGroup1(PatternPool.TEL, value); + } + + /** + * 获取固话号码中的号码 + * + * @param value 完整的固话号码 + * @return 固话号码的号码部分 + * @since 5.7.6 + */ + public static CharSequence subTelAfter(CharSequence value) + { + return ReUtil.get(PatternPool.TEL, value, 2); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/PhoneUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/PhoneUtilTest.java index d00d6e733..a05425e9f 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/PhoneUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/PhoneUtilTest.java @@ -65,4 +65,35 @@ public class PhoneUtilTest { Assert.assertEquals("1234", PhoneUtil.subBetween(mobile)); Assert.assertEquals("5678", PhoneUtil.subAfter(mobile)); } + + @Test + public void testNewTel() { + ArrayList tels = new ArrayList<>(); + tels.add("010-12345678"); + tels.add("01012345678"); + tels.add("020-9999999"); + tels.add("0209999999"); + tels.add("0755-7654321"); + tels.add("07557654321"); + ArrayList errTels = new ArrayList<>(); + errTels.add("010 12345678"); + errTels.add("A20-9999999"); + errTels.add("0755-7654.321"); + errTels.add("13619887123"); + for (String s : tels) { + Assert.assertTrue(PhoneUtil.isTel(s)); + } + for (String s : errTels) { + Assert.assertFalse(PhoneUtil.isTel(s)); + } + Assert.assertEquals("010", PhoneUtil.subTelBefore("010-12345678")); + Assert.assertEquals("010", PhoneUtil.subTelBefore("01012345678")); + Assert.assertEquals("12345678", PhoneUtil.subTelAfter("010-12345678")); + Assert.assertEquals("12345678", PhoneUtil.subTelAfter("01012345678")); + + Assert.assertEquals("0755", PhoneUtil.subTelBefore("0755-7654321")); + Assert.assertEquals("0755", PhoneUtil.subTelBefore("07557654321")); + Assert.assertEquals("7654321", PhoneUtil.subTelAfter("0755-7654321")); + Assert.assertEquals("7654321", PhoneUtil.subTelAfter("07557654321")); + } }