使用正则表达式匹配数字范围表达式

时间:2014-06-08 19:24:40

标签: javascript regex

我正在尝试匹配以下格式的输入

[Number]-[Number]在JavaScript中使用正则表达式。

例如:

  1. 1-100确定
  2. 200-300确定
  3. -0992不行
  4. aa-76不行
  5. 1-不行
  6. 我试过了:

    ^\d+(-\d+)*$
    

    但这根本不起作用。

    任何指针?

2 个答案:

答案 0 :(得分:4)

它不起作用的原因是*量词使(-\d+)成为可选项,允许正则表达式简单地匹配222。删除它一切都会很好。如果您不需要括号,请删除它们:

^\d+-\d+$

如果您希望自己的数字在标题中介于0到100之间,该怎么办?

如果您想确保每边的数字在1到100的范围内,而没有尾随零,则可以使用此代替\d

100|[1-9]\d|\d

你的正则表达式会变成:

^(?:100|[1-9]\d|\d)-(?:100|[1-9]\d|\d)$

如果左边的数字必须低于正确的数字怎么办?

上面的正则表达式将接受第一个2222-1111,第二个接受99-12(例如)。如果您希望正确的数字大于较低的数字,您可以使用捕获括号来捕获每个数字:

^(\d+)-(\d+)$

^(100|[1-9]\d|\d)-(100|[1-9]\d|\d)$

然后,如果有匹配,请说

if(regexMatcher.group(2) > regexMatcher.group(1)) { ... success ...}

答案 1 :(得分:2)

您正在寻找的正则表达式是/\d+-\d+/。如果您不要求整行与正则表达式匹配,则不需要包围^$。例如:

/\d+-\d+/.test("a-100")
// Result: false
/\d+-\d+/.test("-100")
// Result: false
/\d+-\d+/.test("10-100")
// Result: true