【问题标题】:How to combine a few regex expressions in JavaScript?如何在 JavaScript 中组合几个正则表达式?
【发布时间】:2021-05-27 08:01:59
【问题描述】:

我有一些要求来验证电子邮件地址,并为此目的有一些正则表达式。 但是如何将它们组合到一个正则表达式中以使其正常工作?

(?=^\\S+@\\S+\\.\\S+$)

带点的电子邮件地址

(?=^[A-Za-z0-9@$\\._-]+$)

允许使用字母数字、'@'、'.'、'_'、'-'

(?=^[A-Za-z0-9].*$)

不能以特殊字符开头

(?=^.{5,100}$)

5 到 100 个字符

(?=^((?!([0-9]{9,}\\1)).)*$)

不是九个或更多数字

(^(?!.*[@].*[@]).*$)

一个标记

【问题讨论】:

  • 你有没有尝试连接表达式?
  • "允许字母数字、'@'、'.'、'_'、'-'" 因此,它不允许有效字符,如+ 或西里尔文或中文,或变音符号,或其他非拉丁字符。 “介于 5 到 100 个字符之间”在这里设置下限很奇怪 a@b.c 是五个字符。如果其中任何一个被删除,由于其他规则,它将无效。上限也是不需要的 - 确定不是很多地址使用它似乎不是限制它的好理由。 This is the real maximum。 “不是九个或更多数字”非常奇怪的验证规则。
  • 为什么会有这么多麻烦,而不仅仅是<input type="email" />
  • @NiettheDarkAbsol 不知道。有很多很多开发人员似乎与合法电子邮件交战,根本不想接受它们。只有他们对电子邮件应该是什么的解释,即使他们的解释对其应用程序的任何部分的工作方式没有真正的影响。这就像要求用户在单击按钮时单脚站立 - 仅用于指示用户应该如何行为而不需要这样做或产生任何影响。

标签: javascript regex validation


【解决方案1】:

尝试连接你的表达式:

const emailRegex = /(?=^\S+@\S+\.\S+$)(?=^[A-Za-z0-9@$\._-]+$)(?=^[A-Za-z0-9].*$)(?=^.{5,100}$)(?=^((?!([0-9]{9,}\1)).)*$)(^(?!.[@].[@]).*$)/;

【讨论】:

    【解决方案2】:

    有很多使用前瞻的自定义规则,您可以通过匹配而不是断言来省略其中的一些规则。

    ^(?=\S{5,100}$)(?!\S*\d{9})[A-Za-z0-9][A-Za-z0-9$\\._-]*@[A-Za-z0-9$\\._-]+\.[A-Za-z0-9]+$
    
    • ^ 字符串开始
    • (?=\S{5,100}$) 断言 5-100 个非空白字符
    • (?!\S*\d{9}) 断言字符串中不是 9 个连续数字
    • [A-Za-z0-9] 匹配单个字符 A-Z a-z 或数字
    • [A-Za-z0-9$\\._-]* 可选择重复字符类中列出的内容
    • @ 匹配 @ 字符(注意可以省略方括号 [@]
    • [A-Za-z0-9$\\._-]+ 匹配字符类中列出的任何字符的 1 次以上
    • \.[A-Za-z0-9]+ 匹配 . 和字符类中列出的任何字符的 1 倍以上
    • $ 字符串结束

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多