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”
pass
bob@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] 
      )?
 )*
 $