如何排除带有正则表达式的特定数字?

时间:2019-04-19 05:55:04

标签: javascript regex

如何用正则表达式排除特定数字?我想使用正则表达式匹配 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)为假,但实际输出为真

2 个答案:

答案 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");
}