Подтвердить что ты не робот

Почему HTML5-валидация формы позволяет отправлять электронные письма без точки?

Я пишу очень простой макет, чтобы продемонстрировать некоторую валидацию формы HTML5. Тем не менее, я заметил, что проверка электронной почты не проверяет точку в адресе и не проверяет наличие символов после указанной точки.

Другими словами, "john @doe" считается действительным, если явно недействительный адрес электронной почты; "doe" не является доменом.

Вот как я кодирую свое поле электронной почты:

<input type="email" required />

Этого недостаточно?

Отметьте fiddle, чтобы увидеть, что я имею в виду.

Примечание. Я знаю, как это сделать с помощью шаблона RegEx. Мне просто интересно, как кто-то может уйти с использованием типа электронной почты.

4b9b3361

Ответ 1

Поскольку @b является допустимым адресом электронной почты (например, localhost является допустимым доменом). См. http://en.wikipedia.org/wiki/Email_address#Examples

Кроме того, имейте в виду, что вы всегда должны выполнять проверку ввода на сервере. Валидация на стороне клиента должна быть только для того, чтобы давать обратную связь пользователю, и на него нельзя положиться, поскольку его можно легко обойти.

Ответ 2

Теоретически вы можете иметь адрес без "." в.

Так как технически такие вещи, как:

[email protected]
[email protected]
[email protected][IPv6:2001:db8::1]

Все ли действительные письма.

Таким образом, стандартная проверка HTML5 позволяет использовать все допустимые электронные письма, в том числе необычные.

Для некоторых легко читаемых объяснений (Вместо того, чтобы читать стандарты): http://en.wikipedia.org/wiki/Email_address#Examples

Ответ 3

Попробуйте добавить это на вкладку

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

Fiddle

Ответ 4

RFC 822, глава 6, дает спецификацию адреса в расширенной форме Бэксу-Наура (BNF):

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

Использование этой спецификации [email protected] является допустимым адресом.

UPDATE

Чтобы ответить на комментарий 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  

Ответ 5

Вы можете настроить шаблон поля электронной почты:

input:valid {
  border-color: green
}

input:invalid {
  border-color: red
}
Email:
<input type="email" required value="[email protected]" /><br>

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

Ответ 6

Этот шаблон всегда работает для меня.

Текст должен быть в нижнем регистре pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,}$", но я думаю, что он охватывает более или менее большинство писем.