2009-05-29 2 views
1

a ~ z, A ~ Z, 0 ~ 9 및 "-"사이의 어떤 것과도 일치하는 정규 표현식을 필사적으로 찾고 있습니다. 검사 할 문자열이 "admin"인 경우 동일한 정규식이 일치하지 않아야합니다. 그것은 내가 부정적 예측 물건을 추가 한 경우에도 문자열 관리를 위해 일치,정의 된 문자열이 없을 때 일치하는 올바른 정규식은 무엇입니까?

/^(?!admin)|([-a-z0-9]{1,})$/i

그러나 그것은 작동하지 않습니다

나는이 시도.

저는이 정규식을 PHP (PCRE)와 함께 사용하고 있습니다.

답변

6

하나의 정규식에서 "A와 B가 아님"을하는 것은 까다 롭습니다. 보통 두 부분으로 나누는 것이 더 낫습니다 (더 명확하고 쉽게). 이것이 옵션이 아니라면 수행 할 수 있습니다. 당신은 옳은 선상에있어 부정적인 전망을 가지고 있지만 교대로 당신을 죽이고 있습니다.

/^(?!admin$)[-a-zA-Z0-9]+$/ 
펄 확장 구문

는이?!

/ 
^    # beginning of line anchor 
    (?!    # start negative lookahead assertion 
    admin  # the literal string 'admin' 
    $   # end of line anchor 
)    # end negative lookahead assertion 
    [-a-zA-Z0-9]+ # one or more of a-z, A-Z, 0-9, or '-' 
    $    # end of string anchor 
/x 
3

정규 표현식 만 사용할 수 있습니까? (펄 구문)처럼 무언가를하는 것이 더 쉬울 수 있습니다

if ($string ne "admin" && $string =~ /^[-a-z0-9]+$/i) { ... 
1

난 당신이 "또는"(|) 연산자를 제거한 경우 작동 것이라고 생각합니다. 지금은 기본적으로 글자가 맞는지 또는 admin과 같지 않은지와 일치합니다. 따라서 admin과 같을 때 여전히 다른 표현식과 일치하기 때문에 항상 true를 반환합니다.

-1

^([. \] * [AA] [dD를 [mm]가 [Ⅱ] [윈]. \] * $) ([A-Za-z0-9] {1,} $)

regex-freetool과 같은 정규식 테스트 도구를 사용하여 code.google.com

관련 문제