“Beach2018”怎么可能!是输入类型“电子邮件”的有效电子邮件地址?

Posted

技术标签:

【中文标题】“Beach2018”怎么可能!是输入类型“电子邮件”的有效电子邮件地址?【英文标题】:How could "Beach2018!" be a valid email address for input type "email"? 【发布时间】:2019-05-18 03:21:17 【问题描述】:

我有一个包含这些字段的注册表单:

<input type="text" name="fullName" placeholder="Enter Your Name..." required="" id="firstname" class="personHead">
<input type="email" name="emailAddress" placeholder="Enter Your Email Address..." required="" id="email" class="envelope">

最近有人不小心在 fullName 字段中输入了她的电子邮件地址,在 emailAddress 字段中输入了一些垃圾信息(“Beach2018!”)。

由于 emailAddress 字段是type="email",我认为它的验证规则是this regex according to W3C,即supported in almost every browser。

demo fiddle here 显示“Beach2018!”是无效的。所以不知道是怎么提交成功的。

我有她的 userAgent 的记录,上面写着“ios 9.3.5”和“Mozilla/5.0”(以及其他一些可能不适合粘贴到此处的信息)。

如果没有正确处理type=email 验证,表单提交怎么能通过?

【问题讨论】:

【参考方案1】:

我找到了一台运行 iOS 9.1 的旧 iPad 2 (Model A1395),并使用 Google Chrome(可能使用与 Safari 相同的引擎)测试了表单:

type=email 字段似乎没有验证。

附:当我打开 Safari 并用 Google 搜索“我的用户代理是什么”时,它显示的是 Safari/601.1。我不知道如何将其与https://www.caniuse.com/#search=email 中列出的 Safari 3-4 进行比较。

【讨论】:

我相信您之前已经听说过,但在后端验证数据也是一种很好的做法。前端验证对于更快、用户友好的消息很有用,而无需与服务器对话,但服务器不应该相信浏览器或任何前端会正确验证数据。总有办法规避它。我无法从您最初的问题中判断您是否已经在执行后端验证。 @cost 你是对的。我一直很懒,还没用过这个:laravel.com/docs/5.7/validation#rule-email

以上是关于“Beach2018”怎么可能!是输入类型“电子邮件”的有效电子邮件地址?的主要内容,如果未能解决你的问题,请参考以下文章

检测过期的电子邮件地址? [复制]

如何申请163邮箱账号

查找重复的邮箱

反向解析与PTR(Pointer Record)

React-native hooks 表单验证

对于未知数量的域,跨域的 $.post 的替代/修复是啥