如何用正则表达式排除特定数字?我想使用正则表达式匹配 0-9999 直接数字。最多保留两位小数 >,并且可以包含0和9999,但不能包含'9999.xx',不能包含 '10 .xxx'。
我尝试编写如下正则表达式,但其中包含9999.xx。我希望排除“ 9999.xx ”。有人可以帮我更改此正则表达式吗?
let reg = /^([1-9]{1}\d{0,3}(\.\d{1,2})?|0(\.\d{1,2}){0,1})$/
reg.test(0) #outputs true
reg.test(000) #outputs false
reg.test(9999) #outputs true
reg.test(0.11) #outputs true
reg.test(0.111) #outputs false
reg.test(0.1111) #outputs false
reg.test(9999.) #outputs false
reg.test(9999.00) #outputs true
reg.test(9999.01) #outputs true
我希望输出/ ^([1-9] {1} \ d {0,3}(。\ d {1,2})?| 0(。\ d {1,2}){ 0,1})$ /。test(9999.01)为假,但实际输出为真
答案 0 :(得分:2)
您可以在模式开始时对9999\.\d
进行否定的前瞻:
^(?!9999.\d)(?:[1-9]\d{0,3}|0)(\.\d{1,2})?$
https://regex101.com/r/3FvU2a/1
请注意,{0,1}
简化为?
,并且您可以将小数点右边的数字合并为一个组,以使图案更干燥。您也可以删除{1}
(毕竟,令牌在默认情况下将完全匹配一次)。
答案 1 :(得分:1)
据我所知,您只需要在此处进行范围检查:
var number = 9999;
if (number >= 0 && number <= 9999) {
console.log("match");
}
您可能还想使用isNaN()
首先检查输入的数字是否有效:
var number = "9999";
if (!isNaN(number) && number >= 0 && number <= 9999) {
console.log("match");
}