2016-06-07 2 views
1

나는 사용자가 무언가를 검색 할 수있는 필드가 있습니다. 그들은 ^[0-9a-zA-Z*]$을 검색 할 수 있어야합니다.정규식 If-Then-Else 조건

그러나 문자 * (와일드 카드) 만 검색 할 수는 없습니다. 적어도 하나의 다른 문자 또는 숫자가 있어야합니다. a* or *a or 1* or *1이 유효합니다.

유효 검색을 위해 *이 아닌 숫자/문자가 하나 이상 있어야합니다.

if/then/else 조건으로 실현 가능해야한다고 생각합니다. 여기 내 시도입니다!

"^(?(?=[*])([0-9a-zA-Z:\]{1,})|([0-9a-zA-Z:\*]*))$" 
if character = * 
then [0-9a-zA-Z:\]{1,} = user has to enter at least one (or more) characters of the group 
else = [0-9a-zA-Z:\*]* = user has to enter 0 or more characters of the group 

그러나이 작동하지 않습니다 ...

+0

시도 ** [이] (https://regex101.com/r/rF4wZ8/1) ** lookaheads이 정규식 – rock321987

+0

에서 지원 또는 경우 ['가^[0 - 9a-zA-Z *] * [0-9a-zA-Z] [0-9a-zA-Z *] * $'] (https://regex101.com/r/eW7wD6/1). –

+0

자바 정규식 엔진 – Hammelkeule

답변

1

당신은

^[0-9a-zA-Z*]*[0-9a-zA-Z][0-9a-zA-Z*]*$ 

regex demo

이 정규식은 0 개 이상의 문자/숫자/별표와 일치집니다 사용할 수 있습니다, 의무적 인 문자 또는 숫자, 그리고 0 이상의 문자/숫자/별표.

^(?=.*[0-9a-zA-Z])[0-9a-zA-Z*]+$ 

another demo를 참조하십시오

다른 방법으로는 최소 1 개 문자 또는 숫자를 가지고 문자열을 요구할 수 있습니다. ^(?=.*[0-9a-zA-Z]) 긍정적 인 미리보기에는 0 개 이상의 문자 뒤에 줄 바꿈 문자 또는 숫자가 필요합니다. 또한 ^(?=.*\p{Alnum})[\p{Alnum}*]+$ (Java에서 이중 이스케이프 백 슬래시)로 작성할 수도 있습니다.

Java demo :

String rx = "(?=.*\\p{Alnum})[\\p{Alnum}*]+"; 
System.out.println("****".matches(rx));  // FALSE 
System.out.println("*a**".matches(rx));  // TRUE