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

5

昨天我得到了一个任务,需要在用户可以输入要下载的页面范围的字段上实现验证。

阅读一些教程后,我创建了这样的模式,我认为它应该有效,但实际上并没有:(

你能给我一个提示,错在哪里,或者更好的方法应该怎么做。

<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>

附注:您可以在此处进行测试: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。


请提供更多的例子。 - dheerosaur
4个回答

9

在字符串中,您需要转义反斜杠,否则JavaScript会将其删除或解释为转义序列:

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

太好了!这就是我所缺少的!你很棒 :) - Filip Spiridonov
这个 RegExp 匹配 1-2-2 格式。请查看下面的 @codaddict 解决方案。 - Presbitero

7
你可以尝试使用正则表达式:
^(\d+(-\d+)?)(,\d+(-\d+)?)*$

为了允许空格,您可以这样做:

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

Rubular link


2
你可以使用正则表达式字面量定义patt1,而不需要使用new RegExp。否则,你需要在正则表达式字符串中转义所有的'\'(使用'\\')。
var patt1 = /^(\s*\d+\s*\-\s*\d+\s*,?|\s*\d+\s*,?)+$/g;

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


谢谢,现在我明白了区别。 - Filip Spiridonov

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接