【问题标题】:RegEX 14 digits validation with dash separator带破折号分隔符的 RegEX 14 位验证
【发布时间】:2018-11-13 19:40:04
【问题描述】:

我正在使用以下正则表达式^[\d]{4}[-]?[\d]{6}[-]?[\d]{4}$ 将 14 个数字验证为 整体 或划分为

4 digits - 6 digits - 4 digits

以下四个示例与我的正则表达式匹配,但我想排除最后两个示例。

  • 1111-111111-1111 - (根据我的业务逻辑有效)
  • 12341234561234 - (根据我的业务逻辑有效)
  • 1111-111111111 - (我希望这是无效的)
  • 1111111111-1111 - (我希望这是无效的)

【问题讨论】:

  • 那么做一个或......
  • 你想要这个答案用 Java 还是 JavaScript.... 问题是 JavaScript 不支持 Java 用正则表达式所做的一切。

标签: javascript java regex validation


【解决方案1】:

您可以对不想匹配的模式进行负面展望并使用此正则表达式,

^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$

说明:

  • ^ --> 字符串开始
  • (?!\d{4}-\d{10}) --> 负前瞻以避免匹配此模式
  • (?!\d{10}-\d{4}) --> 负前瞻以避免匹配此模式
  • \d{4}-?\d{6}-?\d{4} --> 匹配你想要的模式
  • $ --> 字符串结束

Demo

我能想到的另一种模式,更简单优雅,你可以用这个,

^\d{4}(-?)\d{6}\1\d{4}$

说明:

  • ^ --> 字符串开始
  • \d{4} --> 正好匹配四位数字
  • (-?) --> 匹配可选的连字符并在组 1 中捕获
  • \d{6} --> 精确匹配六位数字
  • \1 --> 这确保两个连字符都存在或不存在,如正则表达式中所述
  • \d{4} --> 正好匹配四位数字
  • $ --> 字符串结束

Demo

【讨论】:

    【解决方案2】:

    只需使用 or 与模式或 14 个数字。

    var re = /^(\d{4}-\d{6}-\d{4}|\d{14})$/
    
    function test(str) {
      console.log(str, re.test(str))
    }
    
    ['1234-123456-1234', '12341234561234',
    '1234-1234561234', '1234123456-1234'].forEach(test)

    【讨论】:

      【解决方案3】:

      ^([\d]{4}[-]?[\d]{6}[-]?[\d]{4})|([\d]{16})$

      希望这会有所帮助! 它有两个正则表达式,一个带有 hiphens,另一个带有整数(16 位)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2011-12-10
        • 2013-12-02
        相关资源
        最近更新 更多