2011-01-26 2 views
4

C#의 Regex를 사용하여 전자 메일 주소의 유효성을 검사하려고합니다.대/소문자를 구분하지 않는 정규식

나는이 패턴을 사용하고 있습니다 :

^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

이 패턴은 대문자와 일치합니다. 예 :

"[email protected]"-> false를 반환합니다. "[email protected]"->는 true를 반환합니다.

분명히 첫 번째 예제도 true를 반환합니다.

참고 : RegexOptions.IgnoreCase 플래그를 사용하고 싶지 않습니다.

첫 번째 예제와 일치하도록 패턴 자체를 변경하고 싶습니다. 나는 패턴의 끝이나 이것과 같은 것을 "/ i"라고 덧붙일 수는 있지만 그것이 효과가없는 것 같아요. 처음에는 "? i"를 사용하지 않는 것이 좋습니다.

어떻게하면됩니까?

(전체 패턴을 다시 작성할 수 있다면 좋을 것입니다.).

감사합니다.

+4

어떻게 PCRE의'i' 수정 모든 .NET의'RegexOptions.IgnoreCase'보다 더? 입력하기가 22 문자 적기 때문입니까? – BoltClock

+0

에주의하십시오. [] 블록에서 어떤 문자와도 일치하지 않으려면 \ –

+1

@Johann 문자로 적어도 (. NET 정규식 구문에서) [] 블록 내에서 이스케이프 처리 할 필요가 없습니다. –

답변

14

[A-Z] 대신 [A-Za-z]를 사용하십시오.

주의 : 정규식에 따라 금지 된 .travel과 같은 최상위 도메인으로 끝나는 전자 메일 주소가 있습니다!

3

글쎄, 이것이 효과가있다.

^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+.[A-Za-z]{2,4}$ 
10

당신은 그냥 사용할 수 있습니다 ^(?i)[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$

을 주목 RegexOptions.IgnoreCase를 설정 (?i), 당신은 늘 정규식에 모든 문자 클래스를 수정하거나 코드가 사용되는 경우 수정해야 이런 식으로.

예 (F # 대화에서) :

Regex.Match("[email protected]", @"^(?i)[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$");; 
val it : Match = [email protected] {Captures = seq [...]; 
           Groups = seq [...]; 
           Index = 0; 
           Length = 13; 
           Success = true; 
           Value = "[email protected]";} 
+0

내가 좋아합니다 -'.gnoreCase'를 설정하기 위해'i' 수정자를 사용하는 것이 코드에서 .ignoreCase를 설정하는 것보다 훨씬 낫습니다. 'i'를 사용하면 정규 표현식이 설정 파일이나 데이터베이스에 저장되어 있으면 쉽게 변경할 수 있습니다. – edhubbell

관련 문제