扫码关注官方订阅号
只能是0-2000的数字,我写得正则是
var p = /1\d{3}|2000|^[1-9]\d{0,2}$|^0$/
但是不知道为啥能匹配到019 0199这样的字符,正则哪里写错了,谁能告诉一下啊?
闭关修行中......
要不直接简单点 数字的019就是19if (/^d+$/.test(num) && num>=0 && num<=2000) return true;
if (/^d+$/.test(num) && num>=0 && num<=2000) return true;
你这个正则有个问题,就是的一个或1d{3}并未强制要求开头和结尾,意味着只要有一1开头的连续4位数字的都可以匹配上。
1d{3}
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)))
正则匹配的都是字符串吧?019 0199 先转为 '19' 和 '199' 了,就 true 了吧
019, 0199 如果直接写成数字的形式就相当于于是19,199。如果写成字符串形式,就可以达到你的要求
正则如下:
var reg = /^((\d{1,3})|(1\d{3})|(2000))$/;
解释:匹配任意的1到3位数(0~999),匹配任何1开头的4位数(1000~1999),匹配2000注意:| 符号各项使用小括号,最后,各或项之外使用小括号括起来。形式:/^((a)|(b)|(c))$/。
整数019匹配正则的时候,转化为字符串,所以019=>'19'。
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
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
要不直接简单点 数字的019就是19
if (/^d+$/.test(num) && num>=0 && num<=2000) return true;你这个正则有个问题,就是的一个或
1d{3}并未强制要求开头和结尾,意味着只要有一1开头的连续4位数字的都可以匹配上。首先,可以直接在你这个基础上改一下
然后,还有一种更常规的解决办法是
正则匹配的都是字符串吧?019 0199 先转为 '19' 和 '199' 了,就 true 了吧
019, 0199 如果直接写成数字的形式就相当于于是19,199。如果写成字符串形式,就可以达到你的要求
正则如下:
解释:匹配任意的1到3位数(0~999),匹配任何1开头的4位数(1000~1999),匹配2000
注意:| 符号各项使用小括号,最后,各或项之外使用小括号括起来。形式:/^((a)|(b)|(c))$/。
整数019匹配正则的时候,转化为字符串,所以019=>'19'。
这样写可以控制01 011 0111这样输入了,返回false了,但是尴尬的是1,11,111这样的输入也返回了false