From 6b61efd869b61613236cf512ae674b2659838696 Mon Sep 17 00:00:00 2001 From: duandazhi Date: Wed, 6 Apr 2022 19:13:37 +0800 Subject: [PATCH] =?UTF-8?q?Validator=20=E5=A2=9E=E5=8A=A0=EF=BC=9A?= =?UTF-8?q?=E4=B8=AD=E5=9B=BD=E4=BA=BA=E5=A7=93=E5=90=8D=E6=AD=A3=E5=88=99?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/PatternPool.java | 5 ++++ .../java/cn/hutool/core/lang/RegexPool.java | 23 +++++++++++++++++++ .../java/cn/hutool/core/lang/Validator.java | 20 ++++++++++++++++ .../cn/hutool/core/lang/ValidatorTest.java | 11 +++++++++ 4 files changed, 59 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java b/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java index 95d434ba0..2a23a6736 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java @@ -163,6 +163,11 @@ public class PatternPool { * 仅限:中国驾驶证档案编号 */ public static final Pattern CAR_DRIVING_LICENCE = Pattern.compile(RegexPool.CAR_DRIVING_LICENCE); + /** + * 中国人姓名 + * 总结中国人姓名:2-60位,只能是中文和新疆人的点. + */ + public static final Pattern CHINESE_NAME = Pattern.compile(RegexPool.CHINESE_NAME); // ------------------------------------------------------------------------------------------------------------------------------------------------------------------- /** 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 1885c274f..f5c76fa48 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 @@ -176,4 +176,27 @@ public interface RegexPool { * 仅限:中国驾驶证档案编号 */ String CAR_DRIVING_LICENCE = "^[0-9]{12}$"; + /** + * 中国人姓名 + * @see PatternPool#CHINESES [\u4E00-\u9FFF]+ 中文字 + * @see PatternPool#GENERAL_WITH_CHINESE "^[\u4E00-\u9FFF\w·]{2,60}$" 中文字、英文字母、数字和下划线 + * 新疆人名里面的点是 · 输入法中文状态下,键盘左上角数字1前面的那个符号;错误字符:..。.. + * 正确新疆人: + * 霍加阿卜杜拉·麦提喀斯木 + * 玛合萨提别克·哈斯木别克 + * 阿布都热依木江·艾斯卡尔 + * 阿卜杜尼亚孜·毛力尼亚孜 + * ---------- + * 错误示例:孟 伟 reason: 有空格 + * 错误示例:连逍遥0 reason: 数字 + * 错误示例:依帕古丽-艾则孜 reason: 特殊符号 + * 错误示例:牙力空.买提萨力 reason: 新疆人的点不对 + * 错误示例:王建鹏2002-3-2 reason: 有数字、特殊符号 + * 错误示例:雷金默(雷皓添) reason: 有括号 + * 错误示例:翟冬:亮 reason: 有特殊符号 + * 错误示例:李 reason: 少于2位 + * ---------- + * 总结中国人姓名:2-60位,只能是中文和新疆人的点· + */ + String CHINESE_NAME = "^[\u4E00-\u9FFF·]{2,60}$"; } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java index 1a6feb82b..9534f56a4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -105,6 +105,11 @@ public class Validator { * 驾驶证 别名:驾驶证档案编号、行驶证编号;12位数字字符串;仅限:中国驾驶证档案编号 */ public final static Pattern CAR_DRIVING_LICENCE = PatternPool.CAR_DRIVING_LICENCE; + /** + * 中国人姓名 + * 总结中国人姓名:2-60位,只能是中文和新疆人的点. + */ + public static final Pattern CHINESE_NAME = PatternPool.CHINESE_NAME; /** * 给定值是否为{@code true} @@ -1186,6 +1191,21 @@ public class Validator { return isMatchRegex(CAR_DRIVING_LICENCE, value); } + + /** + * 是否是中国人姓名 + * + * @author dazer + * + * @param value 中国人姓名 + * @return 是否是正确的中国人姓名 + * @see 5.8.0.M3 + */ + public static boolean isChineseName(CharSequence value) { + return isMatchRegex(CHINESE_NAME, value); + } + + /** * 验证是否为驾驶证 别名:驾驶证档案编号、行驶证编号 * diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java index d4dd14272..bfd6c7ddb 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java @@ -245,4 +245,15 @@ public class ValidatorTest { Assert.assertTrue(Validator.isMatchRegex(Validator.URL, content)); Assert.assertTrue(Validator.isMatchRegex(Validator.URL_HTTP, content)); } + + @Test + public void isChineseNameTest(){ + Assert.assertTrue(Validator.isChineseName("阿卜杜尼亚孜·毛力尼亚孜")); + Assert.assertFalse(Validator.isChineseName("阿卜杜尼亚孜./毛力尼亚孜")); + Assert.assertTrue(Validator.isChineseName("段正淳")); + Assert.assertFalse(Validator.isChineseName("孟 伟")); + Assert.assertFalse(Validator.isChineseName("李")); + Assert.assertFalse(Validator.isChineseName("连逍遥0")); + Assert.assertFalse(Validator.isChineseName("SHE")); + } }