只能是0-2000的数字,我写得正则是
var p = /1\d{3}|2000|^[1-9]\d{0,2}$|^0$/
但是不知道为啥能匹配到019 0199这样的字符,正则哪里写错了,谁能告诉一下啊?
只能是0-2000的数字,我写得正则是
var p = /1\d{3}|2000|^[1-9]\d{0,2}$|^0$/
但是不知道为啥能匹配到019 0199这样的字符,正则哪里写错了,谁能告诉一下啊?
你这个正则有个问题,就是的一个或1d{3}
并未强制要求开头和结尾,意味着只要有一1开头的连续4位数字的都可以匹配上。
console.log(/1\d{3}/.test('01999'))
首先,可以直接在你这个基础上改一下
var reg = /^0*1\d{3}$|2000|^0*[1-9]\d{0,2}$|^0*$/;
['019', '0199', '01999', '001999', '019990'].forEach(v => console.log(v, reg.test(v)))
然后,还有一种更常规的解决办法是
function test(str){
let num = Number(str);
return (num || num===0) && num>=0 && num <=2000;
}
['019', '0199', '01999', '001999', '019990'].forEach(v => console.log(v, test(v)))
正则如下:
var reg = /^((\d{1,3})|(1\d{3})|(2000))$/;
解释:匹配任意的1到3位数(0~999),匹配任何1开头的4位数(1000~1999),匹配2000
注意:| 符号各项使用小括号,最后,各或项之外使用小括号括起来。形式:/^((a)|(b)|(c))$/。
var reg = /^1\d{3}$|2000|^\d{1}&|^([1-9]\d{1})&|^([1-9]\d{2})&/;
reg.test(01) #false
reg.test(11) #false
这样写可以控制01 011 0111这样输入了,返回false了,但是尴尬的是1,11,111这样的输入也返回了false
8 回答6k 阅读✓ 已解决
9 回答9.4k 阅读
6 回答5k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
7 回答10k 阅读
5 回答7.3k 阅读✓ 已解决
要不直接简单点 数字的019就是19
if (/^d+$/.test(num) && num>=0 && num<=2000) return true;