相同的RegExp会返回true和false。为什么?

时间:2015-03-12 14:55:33

标签: javascript regex

我有regexp。并且它可以互换地返回truefalse。它怎么样?如何修复正则表达式?目标是仅允许数字和空格" (123 56 123)。

var r = new RegExp("[0-9\s]{3,30}", "gi")
r.test("123454")
true
r.test("123454")
false

3 个答案:

答案 0 :(得分:3)

问题是使用全局g标志causes internal state (lastIndex property) of RegExp object to be remembered across multiple invocations of test or exec methods.

如果您使用正则表达式中的g标记,例如:

var r = new RegExp("[0-9\\s]{3,30}");

然后它会表现得很好。

r.test("123454")
true
r.test("123454")
true
r.test("123454")
true

PS: i标志没有用处,也可以删除。

答案 1 :(得分:2)

您需要使用锚定的正则表达式,并且还要再次使用反斜杠。 g修饰符。

var r = new RegExp("^[0-9\\s]{3,30}$", "m")

示例:

> var r = new RegExp("^[0-9\\s]{3,30}$", "m")
undefined
> r.test("123454")
true
> r.test("123454")
true

> var r = /^[0-9\s]{3,30}$/m;
undefined
> r.test("123454")
true

答案 2 :(得分:1)

试试这个正则表达式https://regex101.com/r/jO0sX7/1

^[0-9\s]{3,30}$

^[\d\s]{3,30}$