我需要验证字段 - secPhoneNumber(辅助电话号码)。我需要使用JSR验证来满足以下条件
我尝试了下面的代码。该字段始终在表单提交时得到验证。如果字段不为空,我如何验证字段长度为10?
弹簧形式:
<form:label path="secPhoneNumber">
Secondary phone number <form:errors path="secPhoneNumber" cssClass="error" />
</form:label>
<form:input path="secPhoneNumber" />
豆
@Size(max=10,min=10)
private String secPhoneNumber;
答案 0 :(得分:1)
以下模式工作
// ^ # Start of the line
// \s* # A whitespace character, Zero or more times
// \d{10} # A digit: [0-9], exactly 10 times
//[a-zA-Z0-9]{10} # a-z,A-Z,0-9, exactly 10 times
// $ # End of the line
答案 1 :(得分:1)
我认为为了便于阅读并在将来使用我将创建自定义验证类,您只需按照以下步骤操作:
将新的自定义注释添加到字段
@notEmptyMinSize(size=10)
private String secPhoneNumber;
创建自定义验证类
@Documented
@Constraint(validatedBy = notEmptyMinSize.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface notEmptyMinSize {
int size() default 10;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
将您的业务逻辑添加到验证
public class NotEmptyConstraintValidator implements ConstraintValidator<notEmptyMinSize, String> {
private NotEmptyMinSize notEmptyMinSize;
@Override
public void initialize(notEmptyMinSize notEmptyMinSize) {
this.notEmptyMinSize = notEmptyMinSize
}
@Override
public boolean isValid(String notEmptyField, ConstraintValidatorContext cxt) {
if(notEmptyField == null) {
return true;
}
return notEmptyField.length() == notEmptyMinSize.size();
}
}
现在,您可以在不同大小的多个字段中使用此验证。
这是另一个例子,您可以关注example