2012-05-02 3 views
2

지금은 grails 프로젝트에서 작업 중이며 원하는 데이터 필터링에 정규식을 사용하는 데 어려움을 겪고 있습니다. 이것이 어떻게되는지, 모든 문자와 숫자 (대문자와 소문자)를 수용 할 수있는 필드와 키보드에있는 모든 특수 문자 (@ * $ & #)를 가지고 있습니다. 숫자와 문자 (0925abc) 또는 문자, 숫자 및 특수 문자 (0925abc?> <)의 조합 인 경우에만 입력을 허용합니다. 순수 문자 (adCbT), 순수 숫자 (0383) 또는 순수 특수 문자 (@ # $> _ + -) 인 경우 입력을 거부합니다. grails에서 정규식 제약 조건을 사용하여이 작업을 수행 할 수 있습니까? 지식을 공유해 주셔서 감사합니다.정규식 제약 조건 유효성 검사 - grails

+0

이 w.r.t.가 : 여기

는 표현을 테스트하는 몇 가지 코드 도메인 클래스 필드? Validator를 사용해 보셨습니까? http://grails.org/doc/latest/ref/Constraints/validator.html –

+0

네, 그렇지만 유효성 검사기를 사용하면 라인에서 낭비가 될 것이라고 생각합니다. 정규식 유효성 검사를 사용하는 것이 훨씬 쉬울 것이라고 생각합니다. 사용법에 대해 혼란스러워합니다. – antibry

+0

모든 인스턴스에서 작업을 수행하려는 경우 작업 자체가 매우 효율적입니다. 또한 regex는 다른 곳과 마찬가지로 여기에서 작동합니다. 어쨌든 코드 예제를 줄 수 있습니까? 샘플 코드를 보지 않고도 문제를 해결하는 것은 어렵습니다. –

답변

2

그래서, 당신은 단지

'.*([a-zA-Z][[email protected]*$&#]+|[0-9][[email protected]*$&#]|[@*$&#][0-9a-zA-Z]).*' 

같은 당신의 제약 조건에 맞는 정규 표현식, 뭔가를 찾고 있다면 것은 트릭을해야한다. 입력시 한 문자 클래스에서 다른 문자 클래스로 최소한 하나의 전환이 있는지 확인합니다. 부정적인 내다과

, 세 가지 용어가 입력 한 문자 클래스에서 만 많은 charecters 구성하지 않도록

'^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$' 

을 유지하기 위해 조금이라도 더 쉽다.

def ok = ['asdasd90','90asdas','asd#sdfsd9','asd9sdf','908787#@'] 
def nok = ['asdewSDFDSFasd','23803','@*$&#'] 
def expression = '^(?![a-zA-Z]+$)(?![0-9]+$)(?![@*$&#]+$).+$' 
ok.each { value -> 
    assert value.matches(expression) 
} 
nok.each { value -> 
    assert !value.matches(expression) 
} 
관련 문제