java - 根据输入值更改Java Validator的@Pattern Regex

标签 java spring validation

我正在使用 Java 的 Validator 类来验证 Spring Object 类中的一些输入字段。我正在验证 URI,它们可以采用以下任一格式:http:/myURL/uri 或“readFromURI.v1”。最初,我只是验证第一部分,所以我的对象类有:

@Pattern(regexp="[\\w\\s.,;:*&@(){}+-=?/|!\\[\\]%#$~]{0,512}", message="incorrect format")
private String URI;

现在,如果用户在我的应用程序中选择一个复选框,他们将以第二种格式输入值,因此我创建了一个新的正则表达式:

@Pattern.List({
  @Pattern(regexp="[\\w\\s.,;:*&@(){}+-=?/|!\\[\\]%#$~]{0,512}", message="incorrect format"),
  @Pattern(regexp="^\"(Create|Read|Update|Delete)[a-zA-Z]+.*vd+\"${0,512}", message="incorrect format")
})
private String URI;

第二部分的正则表达式可能是错误的,我可能稍后会问这个问题。但现在每当我验证任一格式时,这两个条件都会失败。所以我假设我编写它的方式是尝试应用两个正则表达式。我如何根据值选择一个?如果有帮助的话,该值字段位于同一个类中:

private String URI;
private boolean useHttp; //if true, validate using [\\w\\s.,;:*&@(){}+-=?/|!\\[\\]%#$~]{0,512}

最佳答案

您应该编写一个自定义 validator ,如下所述 here :

  1. 创建新注释 CustomConstraint注释为 @Constraint(validatedBy = CustomConstraintValidator.class)
  2. 上课 CustomConstraintValidator实现ConstraintValidator<CustomConstraint, YourType>
  3. 注释 YourType@CustomConstraint
  4. CustomConstraintValidator 中进行验证取决于您的 bean 值。

您的验证将能够检查您想要测试的任何字段(我不记得每个字段级别注释通过后是否通过了类级别约束,因此您可能必须检查 URI 是否不是 null ) .

关于java - 根据输入值更改Java Validator的@Pattern Regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638794/

相关文章:

java - 需要有关制作包含 TableView 和 ScrollPane 的布局的建议

java - 如何使用 weblogic 和 JPA 在 Spring 中处理事务

asp.net-mvc - Spring MVC 处理页面渲染后的请求

javascript - Joi 验证对象数组,以便只有一个对象具有特定属性

java - java中对象类背后的机制是什么?

Java 泛型和接口(interface)

spring - 具有 Spring 安全性的 JSF - 登录后重定向到指定页面

java - 如何使用 RELAX NG 模式和 JAXP 验证 XML 文档?

javascript - 运行电子邮件正则表达式测试 - .test() 不是函数

Java相同的变量在不同的地方有不同的值