2012-06-20 3 views
1

전자 메일 확인을 위해이 두 정규식을 사용합니다. 첫 번째는 ASP.NET 이메일 정규식 검사기에서 가져온 것이고 두 번째는 내가 찾은 것입니다. 내 질문은 그들과 둘 사이의 차이점은 무엇인가?전자 메일 유효성 검사를위한 정규식의 두 가지 변형

/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ 

/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ 

두 정규식은 ukkkk

<script type="text/javascript"> 

var regex = /^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 
var regex2 = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 

alert(regex.test('[email protected]')); 
alert(regex2.test('[email protected]')); 

</script> 
+0

"더 나은"답변이 객관적입니다. 이메일 서식에 대한 귀하의 요구 사항에 완전히 달려 있습니다. 두 사람 모두 당신이 느끼는 것과 이메일이 아니어야하며, 적절한 효율성으로 만족한다면, 그것은 당신에게 달려 있습니다. –

+0

'1234 @ hello.com' 또는'123 @ 123.123' 만 허용합니다. 유효한 이메일입니까? –

답변

1

실제로 두 가지 모두 완벽하지는 않습니다.

[a-zA-Z0-9_]\w이 동일하므로 두 번째 변형을 사용합니다.
travel과 같은 주먹 차원 도메인이 있으므로 최대 길이를 늘리 겠지만 물론 첫 번째 정규식과 마찬가지로 *을 사용하지 않습니다.
결국, 두 번째 정규식에 실수가 있습니다. 마지막에 더하기가 있어서는 안됩니다. 우리는 1 단계 도메인을 가질 필요가 있지만, 오직 하나만 필요합니다. ^([\w\.\-\+])+\@(([\w\-])+\.)+([a-zA-Z0-9]{2,6})$

어쨌든, [email protected]는 유효한 전자 메일이며, 존재하지 않는 경우에도 : 여기

는 결과이다.

그리고 누군가는 다음과 같이 알고 있습니다. 첫 번째 레벨 도메인이 6 개 이상 길었습니까?

업데이트 :은 RFC 표준에 따라 전자 메일의 유효성을 검사하는 훌륭한 문서입니다. 최종 변형은 매우 인상적입니다.

+3

[TLD를 6 자로 제한하지 마십시오!] (http://newgtlds.icann.org/en/program-status/application-results/strings-1200utc-13jun12-en) –

+0

와우! 고마워요! 'ALLFINANZBERATUNG'과 다른 몇몇 사람들은 놀랍습니다. :) 나는 전자 메일 유효성 확인의 요구 사항을 충족시키기 위해 열심히 노력할 수 있다고 생각합니다. 이 경우 우리는 256 심볼의 최대 길이를 생각하지 않았고, 유니 코드 문자를 검사하지 않았습니다 ... 그러나 실제 응용에서 누군가 그것을 필요로합니까? – Smileek

+0

어쨌든 우리는 RFC 2822에 한 걸음 더 나아가려면'[a-zA-Z0-9] {2,}'(또는'[a-zA-Z] {2,}')를 사용할 수 있습니다. – Smileek

1

"더 나은은"매우 주관적인 용어입니다 수 - 정확히 당신이 찾고있는 무엇에 따라 달라집니다.

첫 번째 정규식은 전자 메일 주소의 첫 번째 부분에 작은 따옴표 문자를 허용하고 밑줄을 포함하는 \ w +를 사용하므로이를 "더 나은"기준으로 사용하는 것이 더 포괄적입니다.

두 번째는 밑줄을 사용하지 않지만 최상위 도메인에는 밑줄이 없으므로 간단합니다. {2,4}+$/은 2, 3 또는 4 그룹으로 주소의 끝을 깨뜨릴 때까지 속도가 느려집니다. 더 빨리 실행하려면 {2,})$으로 변경해야합니다.

궁극적으로 유효한 이메일 주소로 간주되기를 바라는 내용이됩니다.

관련 문제