From fa7af8e7b7eed91d2917688817885349a2965f16 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Wed, 18 Jun 2025 20:27:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(validation):=20=E6=96=B0=E5=A2=9E=20Phone?= =?UTF-8?q?=20=E6=89=8B=E6=9C=BA=E5=8F=B7=E6=A0=A1=E9=AA=8C=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=EF=BC=8C=E6=94=AF=E6=8C=81=E6=A0=A1=E9=AA=8C=E5=BA=A7?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E7=A0=81=E3=80=81=E6=89=8B=E6=9C=BA=E5=8F=B7?= =?UTF-8?q?=E7=A0=81=EF=BC=88=E4=B8=AD=E5=9B=BD=E5=A4=A7=E9=99=86=EF=BC=89?= =?UTF-8?q?=E3=80=81=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81=EF=BC=88=E4=B8=AD?= =?UTF-8?q?=E5=9B=BD=E9=A6=99=E6=B8=AF=EF=BC=89=E3=80=81=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E7=A0=81=EF=BC=88=E4=B8=AD=E5=9B=BD=E5=8F=B0=E6=B9=BE?= =?UTF-8?q?=EF=BC=89=E3=80=81=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81=EF=BC=88?= =?UTF-8?q?=E4=B8=AD=E5=9B=BD=E6=BE=B3=E9=97=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 区别于 Mobile 手机号校验注解(只校验中国大陆手机号码) Closes #70 --- .../constraints/MobileValidator.java | 4 ++ .../starter/validation/constraints/Phone.java | 66 +++++++++++++++++++ .../constraints/PhoneValidator.java | 42 ++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/Phone.java create mode 100644 continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/PhoneValidator.java diff --git a/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/MobileValidator.java b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/MobileValidator.java index be6e9204..c5c411da 100644 --- a/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/MobileValidator.java +++ b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/MobileValidator.java @@ -23,6 +23,10 @@ import jakarta.validation.ConstraintValidatorContext; /** * 手机号校验器 * + *

+ * 校验中国大陆手机号码 + *

+ * * @author Charles7c * @since 2.10.0 */ diff --git a/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/Phone.java b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/Phone.java new file mode 100644 index 00000000..b64167fb --- /dev/null +++ b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/Phone.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.continew.starter.validation.constraints; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; + +/** + * 手机号校验注解 + * + *

+ * 校验座机号码、手机号码(中国大陆)、手机号码(中国香港)、手机号码(中国台湾)、手机号码(中国澳门) + * {@code @Phone(message = "手机号格式不正确")}
+ *

+ * + * @author Charles7c + * @since 2.13.0 + */ +@Documented +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = PhoneValidator.class) +public @interface Phone { + + /** + * 提示消息 + * + * @return 提示消息 + */ + String message() default "手机号格式不正确"; + + /** + * 分组 + * + * @return 分组 + */ + Class[] groups() default {}; + + /** + * 负载 + * + * @return 负载 + */ + Class[] payload() default {}; +} diff --git a/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/PhoneValidator.java b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/PhoneValidator.java new file mode 100644 index 00000000..60f31799 --- /dev/null +++ b/continew-starter-validation/src/main/java/top/continew/starter/validation/constraints/PhoneValidator.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.continew.starter.validation.constraints; + +import cn.hutool.core.util.PhoneUtil; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +/** + * 手机号校验器 + * + *

+ * 校验座机号码、手机号码(中国大陆)、手机号码(中国香港)、手机号码(中国台湾)、手机号码(中国澳门) + *

+ * + * @author Charles7c + * @since 2.13.0 + */ +public class PhoneValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + return PhoneUtil.isPhone(value); + } +}