电子邮件的正则表达式,但不允许以“.co”结尾的地址

Regular expression for email but disallow address ending with `.co`

我有这个有效电子邮件地址的正则表达式,效果很好:^(?=[\w\s])\s*[-+.'\w]+@[-.\w]+\.[-.\w]{2,}\s*$

但是,用户有时会输入像“john@gmail.co”这样的地址。我可以从我的正则表达式中排除“co”,但我仍然想允许“john@example.co.uk”、see here.

我查看了 this post,但我不知道如何将其包含在我当前表达式的 [-.\w]{2,} 部分中。

如何更改我的正则表达式以禁止在电子邮件地址末尾使用“.co”?

您可以在开始时不使用前瞻来编写模式:

^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)[a-z]{2,}\s*$

请注意 [-+.'\w]\w 限制了有效电子邮件地址的范围。

模式匹配:

  • ^ 字符串开头
  • \s*[-+.'\w]+@ 匹配可选的空白字符并重复字符 class 中列出的任何字符,直到匹配 @
  • \w+(?:[-.]\w+)* 在 @ 之后以匹配的 1+ 个单词字符开始并可选择重复 .- 和 1+ 个单词字符
  • \.(?!co\s*$) 匹配一个点并使用否定前瞻断言不 co 和可选的空白字符,直到 string
  • 结束
  • [a-z]{2,}\s* 匹配 2 个或更多字符 a-z 和可选的空白字符
  • $ 字符串结束

看到一个Regex demo

如果您不想允许匹配前导空白字符,您可以省略模式开头和结尾的 \s*