昨天我有一项任务是在用户可以输入他想要下载的页面范围的字段上实现验证。
在阅读了一些教程之后,我创建了这样的模式,在我看来应该可行,但它没有:(
你能否告诉我一个错误在哪里,或者如何以更好的方式完成。
<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
更多例子:
等......就像在MS Office或Adobe PDF Reader中一样
答案 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*)?)*$
答案 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")
应评估为true
,patt1.test("1, 2, 3-5, 6, 8, 10-12,nocando")
至false
答案 3 :(得分:0)
^((\\d+(\\-\\d+)?, ?)*(\\d+(\\-\\d+)?))+$