2010-01-25 4 views
1

나는 다음과 같은 정규 표현식 패턴이 있습니다 (.NET 1.1 정규식 검사기).NET 정규식이 작동하지로해야

^(?=.*[A-Za-z])[[email protected]\\-_\\+\\.]{6,32}$ 

나는 다음과 같은 요구 사항을 충족해야합니다 :

6 32 자 해야합니다 적어도 하나의 문자를 포함해야합니다. 허용되는 문자는 문자 (a-z, A-Z), 번호 (0-9) ("at"기호) @, . (기간), _ (밑줄)이다 + (플러스), - (마이너스).

숫자 값으로 시작하는 모든 항목은 숫자가 아닌 값이 나타날 때까지 '건너 뛴'것처럼 보입니다.

123abc 내가이 숫자 값 (으) 모양을 '계산'의 것을 볼
123abcde
123abcdef 그래서

을 통과 실패에 실패, 왜?

감사합니다.

+1

정규 표현식이 나에게 잘 보이고 Regex.Match를 사용한 .NET 3.5 테스트에서 작동합니다. –

답변

2

합니다. 모든 "실패"예제는 .NET 2.0 Regex 구현을 사용하는 Silverlight를 기반으로하는 Regex Hero을 사용하여 작동합니다.

^[[email protected]\-_\+\.]{6,32}(?<=.*[A-Za-z])$ 

편집 :이는 ASP.NET 유효성 검사기입니다 고려, 당신이 수표를 두 배로해야 당신은 대신에 긍정적 인 보기 숨김 주장을 사용하여 시도하고 그 문제를 해결 얻는 경우에 나타날 수 있습니다

그게 클라이언트 검증 (자바 스크립트) 실패하지 않습니다. 일부 고급 기능 (일부 너비 앞/뒤)은 일부 브라우저에서 지원되지 않습니다.

에서 EnableClientScriptfalse으로 설정하여 클라이언트 측 유효성 검사를 비활성화하고 문제가 해결되는지 확인하십시오. 만약 그렇다면, 그것은 브라우저 지원 문제이고 나는 두 가지로 검증을 분할 권 해드립니다 :

  1. ^[[email protected]\-_\+\.]{6,32}$ # must be 6-32 characters
  2. ^.*[A-Za-z].*$ # must contain a letter
+0

.NET에서 가변 폭 lookbehind를 지원합니까? –

+0

나는 그 개념에 익숙하지 않지만 그렇게 믿지 않는다. –

+0

예. .NET 정규 표현식은 알 수없는 너비 lookbehind를 지원합니다. 적어도 .NET 3.5에서는 그렇습니다. .NET 1.1에서했는지 여부와 제대로 작동하는지 여부는 말할 수 없습니다. –

0
당신이

(?=.*[A-Za-z]) 

.* 수단을 많이 사용할 수 있기 때문에이 숫자 후 내다을 세고

"0 개 이상의 문자 후."

당신이 처음에 편지를 강제로 당신의 패턴을 수정하려면 : 그것은 .NET 1.1의 버그 있다는 매우 가능성이

^[A-Za-z][[email protected]_+.]{5,31}$ 
+0

그래서 어떻게 수정해야합니까? –

+0

'(? =)'는 ** 제로 너비 ** 긍정적 인 미리보기 어설 션이므로 확인 후에 "커서"가 재설정됩니다. –

+0

그는 처음에는 편지를 주장하고 싶지 않습니다. 단지 *는 문자를 포함합니다. –

1

당신이 정규식을 리팩토링 시도?

^(?=[[email protected]+.-]{6,32}$).*[A-Za-z].*$ 

아니면 끝까지 모든 방법을 일치해야하므로 그냥 "패드"를 내다 : 예를 들어, 두 번째 부분은 일치 시작할 수 있도록 일치하는 위치를 재설정합니다

어쩌면
^(?=.*[A-Za-z].*$)[[email protected]+.-]{6,32}$ 

처음에는 물론 필요하지는 않지만, 정규 표현식이 쓰여진 것처럼 작동하지 않는 이유를 알 수 없습니다.

관련 문제