Javascript 用破折号分隔的两个相同长度数字的正则表达式

Javascript 用破折号分隔的两个相同长度数字的正则表达式,javascript,regex,Javascript,Regex,符合以下条件的合适正则表达式是什么: 两个数字,用破折号(-)分隔 两个数字的位数必须相同,但至少为1位,不超过5位 在数字和破折号之前/之后/之间可能有任意空格 匹配的示例: 123-444 1234-5678 98-76 不应匹配的示例: 1234-567 123456-789012 这样的事情可能吗?也许你可以用这个: ^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *-

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

  • 两个数字,用破折号(-)分隔
  • 两个数字的位数必须相同,但至少为1位,不超过5位
  • 在数字和破折号之前/之后/之间可能有任意空格
匹配的示例:

  • 123-444
  • 1234-5678
  • 98-76
不应匹配的示例:

  • 1234-567
  • 123456-789012

这样的事情可能吗?

也许你可以用这个:

^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
在线演示:试试这个:

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

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

当然,有了“最大长度”限制,您可以挤出一个具有所有可能性的表达式,但即使长度为5,这也将是一个无法维护的混乱。只需想象一下,当max len=10时,它会变得多么愚蠢。因此,我建议:

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

嗯……这是否允许在数字之前/之后有空格?例如“123-321”?是的,在连字符的两侧允许0个或更多空格。检查我的链接演示。啊,我没有抓住左括号和右括号中的空格。干得好,伙计!那么数字之间的空格呢,比如“98-76”?@Omri Aharon:不需要。仅在数字之间,而不是单个数字之间。您是如何生成此图表的?看起来像图表的完整url:这也是一个非常好的解决方案,可以轻松地适应数字长度的任意上限!