diff --git a/xiaoyi-auth/pom.xml b/xiaoyi-auth/pom.xml
index 4c3ae0d..aaca05d 100644
--- a/xiaoyi-auth/pom.xml
+++ b/xiaoyi-auth/pom.xml
@@ -88,6 +88,10 @@
com.github.ulisesbocchio
jasypt-spring-boot-starter
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
diff --git a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/model/vo/verificationcode/SendVerificationCodeReqVO.java b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/model/vo/verificationcode/SendVerificationCodeReqVO.java
index 19f022b..db3e21d 100644
--- a/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/model/vo/verificationcode/SendVerificationCodeReqVO.java
+++ b/xiaoyi-auth/src/main/java/top/crushtj/xiaoyishu/auth/model/vo/verificationcode/SendVerificationCodeReqVO.java
@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import top.crushtj.framework.common.validator.PhoneNumber;
/**
*
@@ -25,6 +26,7 @@ public class SendVerificationCodeReqVO {
* 手机号
*/
@NotBlank(message = "手机号不能为空")
+ @PhoneNumber
private String phoneNumber;
}
diff --git a/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumber.java b/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumber.java
new file mode 100644
index 0000000..ab947fa
--- /dev/null
+++ b/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumber.java
@@ -0,0 +1,28 @@
+package top.crushtj.framework.common.validator;
+
+import jakarta.validation.Constraint;
+import jakarta.validation.Payload;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author ayi
+ * @version V1.0
+ * @title PhoneNumber
+ * @date 2026/01/18
+ * @description 手机号验证
+ */
+
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = PhoneNumberValidator.class)
+public @interface PhoneNumber {
+ String message() default "手机号格式不正确, 需为 11 位数字";
+
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
+}
diff --git a/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumberValidator.java b/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumberValidator.java
new file mode 100644
index 0000000..c198bf5
--- /dev/null
+++ b/xiaoyi-framework/xiaoyi-common/src/main/java/top/crushtj/framework/common/validator/PhoneNumberValidator.java
@@ -0,0 +1,25 @@
+package top.crushtj.framework.common.validator;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+
+/**
+ * @author ayi
+ * @version V1.0
+ * @title PhoneNumberValidator
+ * @date 2026/01/18 13:17
+ * @description 手机号验证器
+ */
+
+public class PhoneNumberValidator implements ConstraintValidator {
+ @Override
+ public boolean isValid(String phoneNumber, ConstraintValidatorContext context) {
+ // 校验逻辑:正则表达式判断手机号是否为 11 位数字
+ return phoneNumber != null && phoneNumber.matches("\\d{11}");
+ }
+
+ @Override
+ public void initialize(PhoneNumber constraintAnnotation) {
+ ConstraintValidator.super.initialize(constraintAnnotation);
+ }
+}