【问题标题】:Allow single digit and double digits range using regex?允许使用正则表达式的一位数和两位数范围?
【发布时间】:2016-03-16 05:49:33
【问题描述】:

使用以下正则表达式模式,以下数字范围匹配或不匹配,这符合预期。我遇到的唯一问题是当我的范围为 2-10 或 8-12(一位数到两位数)时,此模式不匹配

例子

1 场比赛

1-2 匹配

-2 不匹配

1、2-3、4、5-7 比赛

1 2, 3 不匹配

1-2-2 不匹配

10-15 场比赛

2-10 不匹配 //这应该匹配但不匹配下面的模式

var patt1 = new RegExp("^(\\s*\\d+\\s*\\-\\s*\\d+\\s*,?|\\s*\\d+\\s*,?)+$");

【问题讨论】:

  • 这个works fine 当我测试它时。请澄清您正在测试的确切字符串。
  • 可能是导致问题的 \\- ,\- 无效。你可以把它写成 var patt1 = /^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$/;
  • 您的模式也适用于我使用“2-10”。就像 /^(\s*\d+\s*-\s*\d+\s*,?|\s*\d+\s*,?)+$/ 和 /^(\s*\d+\s *\-\s*\d+\s*,?|\s*\d+\s*,?)+$/
  • @GregL 是的,你是对的,模式应该可以工作,我发现了另一个问题,我正在检查两个字符串值“2”>“10”,这是失败的!

标签: javascript regex validation range


【解决方案1】:

我认为你需要这个:

^((?:\d+(?:-\d+)*)(?:,\s(?:\d+(?:-\d+)*))*)$

Demo

输入

1
1-2
-2
1, 2-3, 4, 5-7
1 2, 3
1-2-2
10-15
2-10

输出

MATCH 1
1.  `1`
MATCH 2
1.  `1-2`
MATCH 3
1.  `1, 2-3, 4, 5-7`
MATCH 4
1.  `1-2-2`
MATCH 5
1.  `10-15`
MATCH 6
1.  `2-10`

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2021-10-08
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多