2016-06-07 5 views
0

От Multiple Regex @Pattern's for 1 Field? Я вижу, как добавить несколько шаблонов, но они действуют как операция И.Несколько @Pattern ведут себя как операция OR

Есть ли способ применить тип ИЛИ?

Я хочу, чтобы проверить наличие шаблона URL и в этом смысле есть два: Каковы возможности - домен на основе - IP-адрес на основе

Оба похожи, но разные, поэтому я хочу, чтобы включить две модели.

ответ

1

Следуя примеру поста по ссылке вы предоставили, вы можете использовать регулярные выражения OR, поэтому вместо того, чтобы несколько шаблонов, работающих как AND так:

@Pattern.List({ 
    @Pattern(regexp = "(?=.*[0-9])", message = "Password must contain one digit."), 
    @Pattern(regexp = "(?=.*[a-z])", message = "Password must contain one lowercase letter.") 
}) 
private String password; 

Вы можете изменить его использовать один шаблон с регулярным выражением чередование работая ИЛИ:

@Pattern(regexp = "(?=.*[0-9])|(?=.*[a-z])", message = "Password is invalid") 
private String password; 

Я не могу проверить этот код, так как у меня нет проекта, но я просто использовать шаблоны, который работает альтернативные функции во всех регулярных выражениях двигателей.

+0

Я также думал о вашем подходе, но поскольку регулярные выражения довольно длинные, я искал что-то более «чистое». Спасибо, в любом случае. – jlanza

+0

@jlanza ну, это другой вопрос, связанный с тем, как сократить регулярное выражение. Если ответы, поставленные в этом вопросе, решают вашу проблему, вы должны пометить свой вопрос как разрешенный и открыть новый. Чтобы сократить ваше регулярное выражение, вы можете использовать этот символ '(? =. * ([0-9] | [a-z]))' –

+0

Спасибо за ваш ответ. Вопрос в основном связан с регулярным выражением OR, и вы ответили правильно. С моим комментарием я просто сказал, что это уже было в моих планах, но я искал Pattern.List, но с включенным OR, поэтому я могу получать разные сообщения и т. Д. – jlanza

0

Одним из решений является написать скомпилированное ограничение, например MyURLPattern, который внутренне использует специальную функцию Hibernate для «Boolean composition of constraints». В этом случае вам также необходимо добавить аннотацию @ConstraintComposition(OR) к вашему составу.

Предостережение заключается в том, что это решение не будет переносимым между поставщиками проверки Bean.

Смежные вопросы