首页 文章

正则表达式由2个相同长度的数字用短划线分隔

提问于
浏览
4

匹配以下条件的正确正则表达式是什么:

  • 两个数字,以短划线( - )分隔

  • 两个数字必须具有相同的位数,但至少为1且不超过5位

  • 之前/之后/之间的数字和短划线可能有任意的空格

匹配的示例:

  • 123-444

  • 1234 - 5678

  • 98-76

不匹配的示例:

  • 1234-567

  • 123456-789012

这样的事情可能吗?

3 回答

  • 3

    可能你可以使用这个:

    ^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
    

    在线演示:http://regex101.com/r/jG0dB7

  • 4

    No ,这对于正则表达式是不可能的(至少,JS风格) . 您可以引用已匹配的组,但不能引用其属性(例如长度) .

    当然,有了最大长度限制,你可以挤出一个具有所有可能性的表达式,但即使长度为5,这也是一个难以维护的混乱 . 只想象最大len = 10会有多傻 . 所以我建议:

    m = str.match(/^(\d+)\s*-\s*(\d+)$/)
    valid = m && m[1].length == m[2].length
    
  • 4

    试试这个:

    ^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
    

    Regular expression visualization

相关问题