Почему HTML5-валидация формы позволяет отправлять электронные письма без точки?
Я пишу очень простой макет, чтобы продемонстрировать некоторую валидацию формы HTML5. Тем не менее, я заметил, что проверка электронной почты не проверяет точку в адресе и не проверяет наличие символов после указанной точки.
Другими словами, "john @doe" считается действительным, если явно недействительный адрес электронной почты; "doe" не является доменом.
Вот как я кодирую свое поле электронной почты:
<input type="email" required />
Этого недостаточно?
Отметьте fiddle, чтобы увидеть, что я имею в виду.
Примечание. Я знаю, как это сделать с помощью шаблона RegEx. Мне просто интересно, как кто-то может уйти с использованием типа электронной почты.
Ответы
Ответ 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,}$"
, но я думаю, что он охватывает более или менее большинство писем.