2013-06-08 5 views
0

의도

전자 메일 주소에 대해 최소한의 유효성 검사를 수행하려고 노력하고 있습니다. 나는이 일을 해요 이유가 내가 구현하고 사양이 형식으로 전자 메일 주소가 필요하다 :전자 메일 주소의 도메인 부분에있는 유효한 문자는 무엇입니까?

mailto:<uri-encoded local part>@<domain part>

단순히 시작 mailto: 최종 @에 분할하고 싶은

하고, "로컬 부분"이 이들 사이에 있다고 가정합니다. "로컬 부분"이 인코딩 된 URI인지 확인합니다.

이보다 훨씬 더 많은 것을하고 싶지는 않습니다.이 사양은 대부분의 경우 "최선의 노력"유효성 검사를 허용하지만 URI 인코딩과 mailto: 접두사에 대해 매우 구체적입니다.

문제 내가 읽은 모든 것을에서

@에 분할 나에게 위험한 것 같다.

웹 및 스택 오버플로 응답에 대한 많은 충고를 보았습니다. 대부분 "RFC 읽기"라고 말하고 일부는 도메인 부분이 특정 문자 만 가능하다고 말합니다. 즉 1-9a-zA-Z-., 아마도 몇 가지 다른 문자가 있지만 그 이상은 아닙니다. 나는 도메인 이름에 대한 다양한 RFC를 읽을 때 예 :은 :

, 나는 "any CHAR" (dtext) 또는 "any character between ASCII 33 and 90" (dtext)@ 기호를 사용할 수 있습니다 의미있는, 허용되는 것을 알 수있다. 이것은 "comments" are allowed in parens () and can contain characters between ASCII 42 and 91@을 포함하기 때문에 더 복잡해집니다.

RFC1035 seems to support the letters+digits+dashes+periods requirement 그러나 "domain literal" syntax in RFC5322은 (는) 문자를 허용 할 수 있습니다.

나는 RFC를 오해하고 있습니까? 아니면 전자 메일 주소의 도메인 부분에 @을 허용하지 않는 것이 있습니까? "도메인 리터럴"구문은 내가 염려 할 필요가없는 것입니까?

+0

코드에 포함 된 'mailto : ...'줄 제출과 관련하여 버그가 있으므로 입력 내용을 설명하는 해당 코드 줄의 공백을 무시하십시오. - http://meta.stackexchange.com/questions/183642를 참조하십시오. –

답변

2

인터넷의 전자 메일에 대한 최신 RFC는 RFC 5322이며 특히 주소를 지정합니다.

dot-atom은 사양에 정의 된 매우 제한된 문자 집합입니다. 그러나 quoted-string은 문제가 발생할 수있는 곳입니다. 자주 사용되지는 않지만 실행 가능성에 있어서는 @ 문자를 포함 할 수있는 따옴표를 사용할 수 있습니다.

그러나 문자열을 마지막으로 @에서 분리 한 경우 local-partdomain을 안전하게 찾아야하며, 이는 사용자가 확인할 수있는 방법으로 잘 정의되어 있습니다.

이 문제는 punycode과 함께 발생하며 거의 모든 유니 코드 문자를 유효한 DNS 이름으로 매핑 할 수 있습니다. 프론트 엔드 시스템이 punycode를 이해하고 해석 할 수 있다면 유효한 유니 코드 문자를 가진 거의 모든 것을 처리해야합니다.punycode로 작업하지 않을 것이라는 것을 알고 있다면, 제한된 세트, 일반적으로 글자, 숫자 및 하이픈 문자를 사용할 수 있습니다.

늦은 위대한 Jon Postel의 말을 인용하면 다음과 같습니다. TCP 구현은 견고성이라는 일반적인 원칙을 따라야합니다. 당신이하는 일에서 보수적이어야합니다. 다른 사람들로부터 받아 들일 때 진보적이어야합니다.

로컬 부분에 대한 쪽지 ​​: 인터넷에 사양을 엄격하게 준수하지 않아도되는 사양의 바깥에있는 것들을 허용 할 수있는 시스템이 많이 있다는 사실을 명심하십시오. 오래 동안 자유주의 수용/보존 전송 철학으로 인해.

+0

도메인 부분이며'@'에 나뉘어 있습니다. 여러분의 의견과 경고는 높이 평가됩니다. :) –

+0

지난 밤에 잠을 너무 적게합니다. 당신이 실제로 물어 본 것에 조금 더 중점을 두어 수정하겠습니다. – gaige

+0

당신의 질문에 조금 더 온 것 같네요. – gaige