JavaScript正则表达式(页面范围验证)

时间:2010-12-17 06:44:20

标签: javascript regex

昨天我有一项任务是在用户可以输入他想要下载的页面范围的字段上实现验证。

在阅读了一些教程之后,我创建了这样的模式,在我看来应该可行,但它没有:(

你能否告诉我一个错误在哪里,或者如何以更好的方式完成。

<script type="text/javascript">
var patt1=new RegExp("^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$");
document.write(patt1.test("1, 2, 3-5, 6, 8, 10-12"));
</script>

P.S。您可以在此处进行测试:http://www.w3schools.com/js/tryit.asp?filename=tryjs_regexp_test

更多例子:

  • 1场比赛
  • 1-2匹配
  • -2不匹配
  • 1,2-3,4,5-7匹配
  • 1 2,3不匹配
  • 1-2-2不匹配

等......就像在MS Office或Adobe PDF Reader中一样

4 个答案:

答案 0 :(得分:7)

你需要转义字符串中的反斜杠,否则JavaScript会将它们剥离出来或将它们解释为转义序列:

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

答案 1 :(得分:4)

你可以试试正则表达式:

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

要允许您之间的空白区域:

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

Rubular link

答案 2 :(得分:1)

您可以使用正则表达式patt1定义new RegExp而不是literal。否则,你必须在正则表达式字符串中转义所有'\'(使用'\\')。

var patt1 = /^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$/g;

现在patt1.test("1, 2, 3-5, 6, 8, 10-12")应评估为truepatt1.test("1, 2, 3-5, 6, 8, 10-12,nocando")false

答案 3 :(得分:0)

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