2016-06-07 2 views
0

Multiple Regex @Pattern's for 1 Field? 여러 패턴을 추가하는 방법은 나와 있지만 AND 연산으로 작동합니다.OR 연산과 같이 동작하는 여러 개의 @Pattern

OR 유형을 적용 할 수있는 방법이 있습니까? 도메인 기반 - - IP 주소는 모두 비슷하지만 다른

기반 그래서 두 패턴을 포함 할 :

나는 두 possiblities가 URL의 패턴이 의미에서 확인하시기 바랍니다. 제공된 링크 예제 후 다음

답변

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; 

을 당신은 정규식 하나 개의 패턴을 사용하도록 변경 될 수 있습니다 교대대로 작동 OR : 내가 프로젝트를 가지고 있지 않기 때문에

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

나는이 코드를 테스트 할 수 없습니다,하지만 난 그냥 모든 정규식 엔진에서 작동 교대 패턴을 사용합니다.

+0

나는 또한 당신의 접근 방법에 대해 생각해 봤지만 정규 표현식이 꽤 길기 때문에 나는 좀 더 "깨끗한"것을 찾고 있었다. 어쨌든 고마워. – jlanza

+0

@jlanza 잘, 그것은 정규 표현식을 줄이는 방법과 관련된 다른 질문입니다. 이 질문에 게시 된 답변으로 문제가 해결되면 질문을 해결 됨으로 표시하고 새 질문을 열어야합니다. 귀하의 정규식을 단축 관련, 그럼 당신은 다음을 사용할 수 있습니다. '(? =. * ([0-9] | [a - z]))' –

+0

귀하의 회신에 감사드립니다. 질문은 일반적으로 정규 표현식 OR과 관련이 있으며 올바르게 대답했습니다. 내 의견으로 나는 이것이 내 계획에 이미 있다고 말했을 뿐이었다. 그러나 Pattern을 찾고 있었다. 그러나 OR로 그것과 함께, 나는 다른 메시지 등을 얻을 수있다. – jlanza

0

하나의 해결책은 내부적으로 "Boolean composition of constraints"의 Hibernate 특정 기능을 사용하는 MyURLPattern과 같이 구성된 제약 조건을 작성하는 것입니다. 이 경우 @ConstraintComposition(OR) 주석을 작성 제약 조건에 추가해야합니다.

주의해야 할 점은이 솔루션은 Bean 유효성 검사 공급자간에 이식 할 수 없다는 것입니다.