正则表达式允许数字仅在1到20000之间

时间:2016-01-29 06:41:08

标签: javascript regex

我是javascript的新手,我正在使用正则表达式来验证值是否在1到20000之间          ^(?:[1-9]|(?:[1-9][0-9])|(?:[1-9][0-9][0-9])|(?:[1-9][0-9][0-9][0-9])|(?:[1-9][0-9][0-9][0-9][0-9])|(?:20000))$

这是我试过的表达,但它允许99999为有效

2 个答案:

答案 0 :(得分:3)

虽然我怀疑这是最有效的解决方案,但这应该可以解决问题。

/^((1[0-9]{0,4})|([1-9][0-9]{0,3})|20000)$/

请注意,这是字符串匹配,而不是类型转换,因此小数位和零填充之类的内容将不匹配。

Regex Explained

graph

我使用的单元测试:

for (var i = 0; i < 100000; i++) {
	var should = i > 0 && i <= 20000;
	if (should !== /^((1[0-9]{0,4})|([1-9][0-9]{0,3})|20000)$/.test('' + i)) {
		console.log('FAILED:', i);
	}
}
console.log('DONE');

答案 1 :(得分:-1)

您可以使用:

^1?\d{0,4}$

我认为您应该使用数字比较来获得更好的性能。 我希望有所帮助。