javascript - 怎么匹配0到2000的数字?
阿神
阿神 2017-04-11 09:59:52
[JavaScript讨论组]

只能是0-2000的数字,我写得正则是

var p = /1\d{3}|2000|^[1-9]\d{0,2}$|^0$/

但是不知道为啥能匹配到019 0199这样的字符,正则哪里写错了,谁能告诉一下啊?

阿神
阿神

闭关修行中......

全部回复(8)
大家讲道理

要不直接简单点 数字的019就是19
if (/^d+$/.test(num) && num>=0 && num<=2000) return true;

巴扎黑

你这个正则有个问题,就是的一个或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)))
PHPz

正则匹配的都是字符串吧?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'。

PHPz
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

巴扎黑

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号