HTML5 양식 유효성 검사에서 점이없는 이메일을 허용하는 이유는 무엇입니까?


113

HTML5 양식 유효성 검사를 보여주기 위해 매우 간단한 모형을 작성하고 있습니다. 그러나 이메일 유효성 검사는 주소의 점을 확인하지 않으며 해당 점 다음에 오는 문자도 확인하지 않습니다.

즉, "john @ doe"는 유효한 이메일 주소가 아닌 경우 유효한 것으로 간주됩니다. "doe"는 도메인이 아닙니다.

이것이 내 이메일 필드를 코딩하는 방법입니다.

<input type="email" required />

충분하지 않습니까?

바이올린 을 확인하여 내가 의미하는 바를 확인하십시오 .

참고 : 대신 RegEx 패턴을 통해이를 수행하는 방법을 알고 있습니다. 나는 누군가가 대신 이메일 유형을 사용하여 어떻게 벗어날 수 있는지 궁금합니다.


10
In other words, "john@doe" is considered valid, when it's clearly not a valid email address; doe isn't a domain.예, doe확실히 도메인이 될 수 있으며 (생각해보십시오 localhost) 해당 주소는 사양에 따라 기술적으로 유효합니다.
admdrew

2
ㅎ @admdrew ... 그건 당신이 메일 서버 자체에서 전자 메일을 전송하는 경우, 흥미로운 경우, 그리고 쓰기로 결정 것이다 "친구 @ localhost"를
Katana314

@ Katana314-헤, 응. 대부분의 (잘 구성된) 메일 서버는 예상 도메인과 일치하지 않는 주소로 전송되는 메시지를 거부하므로 일반적으로 localhost주소에 문제가 없습니다 .
admdrew dec.

답변:


84

a @ b는 유효한 이메일 주소이기 때문입니다 (예 : localhost는 유효한 도메인 임). http://en.wikipedia.org/wiki/Email_address#Examples 참조

또한 항상 서버에서 입력 유효성 검사를 수행해야합니다. 클라이언트 측 유효성 검사는 사용자에게 피드백을 제공하는 용도로만 사용해야하며 쉽게 우회 할 수 있으므로 신뢰할 수 없습니다.


7
감사. 이 기본 이메일 유효성 검사를 통해 어떤 회사도 어떤 이점을 얻을 수 있는지 알 수 없습니다. Facebook은 누군가가 a @ b 주소로 가입하는 것을 허용하지 않습니다. 그래도 정보 주셔서 감사합니다. (나는 귀하의 답변을
반대 투표

6
Facebook과 같은 웹 사이트에서 공개적으로 액세스 할 수있는 경우에는 사용할 수 없습니다. 그러나 내부 웹 사이트를 생각해보십시오. joe @ support에 편지를 보낼 수 있습니다. 그러나 나는 또한 최소한의 사용이라고 생각합니다. 그럼에도 불구하고 웹 브라우저는 가장 일반적인 경우가 아닌 표준 (예 : RFC)을 기반으로 구현해야합니다.
Ali Alavi

9
누군가가 실제로 localhost에 이메일을 보낸 마지막 시간이 궁금합니다!
Matthew Lock

2
짧은 작업의 이메일 주소 (!) 참고 하나 (AS recordsetter.com/world-record/shortest-email-address/4327 )입니다au@ua
Kyborek

132

이론적으로 "."없이 주소를 가질 수 있습니다. 에.

기술적으로 다음과 같은 것 이후 :

user@com
user@localserver
user@[IPv6:2001:db8::1]

모두 유효한 이메일입니다.

따라서 표준 HTML5 유효성 검사는 흔하지 않은 이메일을 포함하여 모든 유효한 이메일을 허용합니다.

읽기 쉬운 설명 (표준을 읽는 대신) : http://en.wikipedia.org/wiki/Email_address#Examples


1
동의합니다. 이것은 '해결책'이 아닌 '왜'에 대한 답입니다. 이유도 궁금했습니다. 이제 나는 "수정"하지 않는 것을 압니다.
Eleanor Zimmermann

첫 번째 유형의 예는 uz2018 년 10 월 현재 IP를 직접 가리키는 도메인 입니다.을 수행하면 nslookup uz을 가리 키 므로이 91.212.89.8도메인에서도 이메일을 가질 수 있습니다.
PulseJet

36

이것을 입력에 추가하십시오

pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$"

깡깡이


2
사용 가능한 많은 새 도메인 (예 : 회계사 [11], 국제 [13] 등) 및 잠재적 최대 길이가 63 인 경우 정규식 패턴의 길이 값은 {2, 63}이어야합니다.
unasAquila

42
-1. 첫째, 이것이 무엇을 허용하거나 제한하는지, 왜 누군가가 그러한 규칙을 원하는지 설명하려고 시도하지 않았습니다. 둘째, 표준이 허용하는 것보다 훨씬 더 제한적입니다 (표준을 읽고 그로 킹 한 척하지는 않겠지 만, 예를 들어 en.wikipedia.org/wiki/Email_address#Internationalization 또는 Stack의 많은 이메일 유효성 검사 질문을 참조하십시오. 이상한 이메일 주소의 예에 대한 오버플로). 왜 그럴까요? 누군가 자신의 이메일에 특이한 것을 입력하는 경우 수락하십시오. 귀하보다 더 잘 알고있을 가능성이 있습니다.
Mark Amery

7
사실 나는 그들이 실수를하고 있다는 "기회가있다"고 말하고 싶다. / 아마도 / 매우 비정상적인 이메일 주소를 가지고있을 수 있지만, 대부분의 경우 유효성 검사 통과를 중지하고 메시지를 표시하면 잘못된 이메일 주소 대신 올바른 이메일 주소를 얻게 될 것입니다. 확인할 사용자.
Geoff Kendall

1
: 이것은 문자열의 시작 부분에서 일치를 시작하고 또한 대문자를 받아 들여야 나타내는 ^을 가져야한다^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$
Kohjah Breese

13

RFC (822) , 제 6 장 증강 배 커스 - 나 우어 형식 (BNF)의 어드레스의 지정을 제공한다 :

addr-spec   =  local-part "@" domain
local-part  =  word *("." word)
domain      =  sub-domain *("." sub-domain)

이 사양을 사용 a@b하는 것은 유효한 주소입니다.

최신 정보

Trejkaz의 의견에 답하기 위해 다음 정의를 추가합니다. SPACE가 허용되지만 따옴표로 묶인 문자열로만 표시됩니다.

word          =  atom / quoted-string
atom          =  1*<any CHAR except specials, SPACE and CTLs>
quoted-string = <"> *(qtext/quoted-pair) <">
SPACE         =  <ASCII SP, space>
CTL           =  <any ASCII control character and DEL> 
qtext         =  <any CHAR excepting <">, "\" & CR, and including linear-white-space>
quoted-pair   =  "\" CHAR  

OTOH, RFC 822는 또한 Chrome이 허용하지 않는 것처럼 보이는 로컬 부분에 공백을 넣을 수 있으므로 RFC를 참조로 사용하는지 확실하지 않습니다. (그들은해야에도 불구하고!)
Trejkaz

8

이 MDN 페이지에는 정규식 브라우저가 이메일을 확인하는 데 사용해야하는 정규식이 표시됩니다.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation

도메인 이름에 점이 하나 이상 필요하도록이 정규식을 약간 변경할 수 있습니다 . *정규식 끝에 있는 별표 를 플러스로 변경 +합니다. 그런 다음 해당 정규식을 pattern속성으로 사용하십시오.

<input type="email" pattern="^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$"></input>

3

이메일 필드의 패턴을 사용자 정의 할 수 있습니다.

input:valid {
  border-color: green
}

input:invalid {
  border-color: red
}
Email:
<input type="email" required value="a@b.c" /><br>

Non-dots Email:
<input type="email" required pattern="[^.]+@[^.]+" value="a@b.c" />


2

정규식 패턴을 사용하여 html5로 수행하는 방법은 다음과 같습니다. 표시 할 사용자 지정 메시지를 포함 할 수도 있습니다.

<form>
  <input type="email" value="paul@test" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$" title="Hey, you are missing domain part in the email !!!"/>
  <button type="submit">Click Me</button>
</form>


-5

이 패턴은 항상 저에게 효과적입니다.

텍스트는 소문자 여야 pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"하지만 대부분의 이메일을 다룬다 고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.