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

时间:2014-01-13 10:28:21

标签: javascript regex

符合以下条件的正确的正则表达式是什么:

  • 两个数字,用短划线( - )
  • 分隔
  • 两个数字必须具有相同的位数,但至少为1且不超过5位
  • 在数字之前/之后/之间以及短划线可能存在任意空格

匹配的示例:

  • 123-444
  • 1234 - 5678
  • 98-76

不应匹配的示例:

  • 1234-567
  • 123456-789012

这样的事情可能吗?

3 个答案:

答案 0 :(得分:5)

可能你可以用这个:

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

试试这个:

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

Regular expression visualization