Javascript 为什么/0(\.\d+;)?|1/.test(';0.';)返回true?
甚至Javascript 为什么/0(\.\d+;)?|1/.test(';0.';)返回true?,javascript,regex,Javascript,Regex,甚至/0(\.\d+)| 1/.test(“…0.0.0”)returntrue。。。我只想得到一个RegExp来测试0和1之间的数字。您需要使用^和$锚定RegExp,否则如果可以在字符串中的任何位置找到模式,它就会匹配 console.log(/^(0(\.\d+)?| 1)$/.test(“…0.0.0”); console.log(/^(0(\.\d+)?| 1)$/.test('0.1'); console.log(/^(0(\.\d+)?| 1)$/.test('2.3')您需要使
/0(\.\d+)| 1/.test(“…0.0.0”)
returntrue
。。。我只想得到一个RegExp来测试0和1之间的数字。您需要使用^
和$
锚定RegExp,否则如果可以在字符串中的任何位置找到模式,它就会匹配
console.log(/^(0(\.\d+)?| 1)$/.test(“…0.0.0”);
console.log(/^(0(\.\d+)?| 1)$/.test('0.1');
console.log(/^(0(\.\d+)?| 1)$/.test('2.3')
您需要使用^
和$
锚定regexp,否则如果可以在字符串中的任何位置找到模式,则它将匹配
console.log(/^(0(\.\d+)?| 1)$/.test(“…0.0.0”);
console.log(/^(0(\.\d+)?| 1)$/.test('0.1');
console.log(/^(0(\.\d+)?| 1)$/.test('2.3')代码>返回true的原因是,它在给定文本中查找匹配项。
上面的正则表达式将在给定文本的任何位置找到任何1
、0
或0.d+
。所以对于…0.0.0
,它匹配它找到的第一个0.d+
。在这种情况下,它是0.0
同样,对于标题中的案例0.
。正则表达式匹配它找到的第一个0
,忽略
您需要查看添加的是锚定标记。因此,您可以尝试以下方法:
^
-表示字符串的开头
$
-表示字符串的结尾
这可以确保像0.
和…0.0.0
这样的边缘情况得到正确处理
[
'...0.0.0',
'0',
'0.',
'0.12546',
'0.0.0',
'1',
'2'
].forEach(exampleString=>console.log(exampleString,/^((0(\.\d+))| 1)$/.test(exampleString))
嗯,它返回true的原因是因为它在给定文本中找到了匹配项。
上面的正则表达式将在给定文本的任何位置找到任何1
、0
或0.d+
。所以对于…0.0.0
,它匹配它找到的第一个0.d+
。在这种情况下,它是0.0
同样,对于标题中的案例0.
。正则表达式匹配它找到的第一个0
,忽略
您需要查看添加的是锚定标记。因此,您可以尝试以下方法:
^
-表示字符串的开头
$
-表示字符串的结尾
这可以确保像0.
和…0.0.0
这样的边缘情况得到正确处理
[
'...0.0.0',
'0',
'0.',
'0.12546',
'0.0.0',
'1',
'2'
].forEach(exampleString=>console.log(exampleString,/^((0(\.\d+))| 1)$/.test(exampleString))
请提供阳性和阴性案例的示例数据。请注意,0.0.0
不是有效数字。请提供阳性和阴性情况的样本数据。请注意,0.0.0
不是一个有效的数字。regexp会找到1
、0
和0.d+
(不仅仅是1
和0.d
),这就是为什么它也会匹配标题中的0.
。我很确定它不会匹配0.
,但它肯定也会匹配0
。抱歉,我指的是原始regexp,不是您的解决方案(最初您在解释原始regexp的发现时只有1
或0.d
),啊,您完全正确。我明白我的误解是什么了,我以为你的意思是regex将匹配0.
作为一个整体-而不是0中的0
。
regexp将找到1
、0
和0.d+
(不仅仅是1
和0.d
),这就是为什么它也与标题中的0.
匹配。我很确定它不会与0.
匹配,但它肯定也会与0
匹配。对不起,我指的是原始regexp,而不是您的解决方案(最初您在解释原始regexp的发现时只有1
或0.d
)啊,你完全正确。我明白我的误解是什么了,我以为你的意思是正则表达式将匹配0.
作为一个整体-而不是0中的0
。
/0(\.\d+)?|1/
/^((0(\.\d+)?)|1)$/