Javascript Internet可路由电子邮件地址验证
我有一个表格,我需要在提交前验证互联网可路由电子邮件地址,并拒绝本地路由。Javascript Internet可路由电子邮件地址验证,javascript,angularjs,regex,email-validation,Javascript,Angularjs,Regex,Email Validation,我有一个表格,我需要在提交前验证互联网可路由电子邮件地址,并拒绝本地路由。ng pattern=“email.text”和ng pattern=“email”passbob@bob这应该失败,因为这些是本地网络之外的客户电子邮件地址 以下不给出了我想要的内容(许多人使用的是不完全符合RFC标准或不拒绝本地路由的基本正则表达式): 阅读它引用了带有正则表达式的RFC 5322: \A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&a
ng pattern=“email.text”和ng pattern=“email”
passbob@bob
这应该失败,因为这些是本地网络之外的客户电子邮件地址
以下不给出了我想要的内容(许多人使用的是不完全符合RFC标准或不拒绝本地路由的基本正则表达式):
阅读它引用了带有正则表达式的RFC 5322
:
\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
| "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
| \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:
(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
| \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
\])\z
有没有办法将上述内容转换成需要
tld类型的正则表达式,这样它就可以在互联网上路由?具体地说,我可以在ng模式中使用它,如ng模式=“
”中的形式?Wiktor的reg-ex以请求的格式,传递internet可路由的电子邮件地址并拒绝本地路由:
ng-pattern="/^(?:[a-z0-9!#$%&\x27*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\x27*+/=?^_`{|}~-]+)*|\x22(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\x22)@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/"
我喜欢这里的这个
扩大
^
[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]
)?
)*
$
为什么要bob@bob
是否无效?并非所有的电子邮件都必须是“互联网可路由的”。全部的bob@bob据说在本地网络上有一台名为bob的机器,有一个名为bob的用户。仅仅因为不能在特定网络之外使用它并不意味着它无效。将\A
替换为^
,\z
替换为$
,并使用/../../
符号(“
必须是\x22
,”
可以是\x27
)。检查停止尝试使用正则表达式验证所有电子邮件地址。我从未见过通过所有测试的解决方案。如果需要,请检查域中的@
和
,如果确实要检查,请发邮件进行验证。@MarcB信息非常好,它解释了我的沮丧情绪。有什么办法吗要检查angular?或其他正则表达式中的“internet可路由”电子邮件地址,以确保它是internet可路由的?从技术上讲,“外部”的任何电子邮件地址“需要至少有@domain.tld类型的设置。e、 gmail.com<代码>bob@gmail
和bob@gmail.com
将是两件不同的事情<代码>bob@gmail
是一个本地地址,您的本地网络中有一台名为gmail的机器。bob@gmail.com正如预期的那样,你将访问谷歌的gmail服务器。不要浪费时间在这种愚蠢的模式上(这是错误的,可能很慢)。使用基本检查。请记住,无论您使用何种模式,都不会阻止您输入不存在的电子邮件(即使格式良好)。问题是文本的格式是否正确,这有助于避免用户输入问题。这正是问题所需要的。根据您的论点,即使检查域是否存在,也不意味着电子邮件地址是合法的,因此唯一真正的检查方法是发送电子邮件,并让他们通过随机生成的链接验证收到的电子邮件(仅发送是不够的,因为服务器可以设置为不发送回退)。验证电子邮件可以是一个单独的验证过程(但超出了问题的范围)。我喜欢这样,因为它是干净的。但是,它允许通过非internet可路由地址(例如。bob@bob)
^
[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]
)?
)*
$