为什么(新的RegExp('[1-9]'))。test('10')返回true?

时间:2014-01-14 07:16:25

标签: javascript regex

RegEx [1-9]不应该与1到9之间的数字匹配,为什么10包含0返回true?

2 个答案:

答案 0 :(得分:7)

/[1-9]/正则表达式表示“该字符串包含19之间的任何字符。

由于字符串包含1,因此匹配。 0无关紧要,字符串已匹配。

如果您想要“字符串由1到9之间的单个数字组成”,那么您需要:

/^[1-9]$/

如果你想“字符串只包含1到9之间的数字(至少其中一个)”,那么你想要:

/^[1-9]+$/

答案 1 :(得分:2)

正则表达式测试一个字符串,你正在测试字符串10,它由字符10组成,然后测试该字符串是否包含以下字符之一: 1 2 3 4 5 6 7 8 9 ,它的确如下:1。因此,您的代码评估为真。

如果要检查给定数字是否在给定范围内(1 - 9),请利用JS将值强制转换为您需要的任何类型的事实:

var nString = '10';
console.log(nString > 0 && nString < 10);//false

或明确强制:

var strAsNr = +(nString);