正则表达式允许从0到365的十进制数,但365应该将所有十进制数字都设为0

时间:2019-03-12 11:55:28

标签: javascript regex

我正在尝试创建一个正则表达式,以允许从0到365之间带有可选的小数,但是365应该将所有可选的十进制数字都仅设置为0。

^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9])(\.\d+)|(36[0-5])(\.[0]+)?$

这仅接受365和365,后跟十进制(365.0,365.00),但仅接受十进制1.0、10.0、100.0,而不接受十进制1,10,100,这不知道发生了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

两种使用(请参见a demo on regex101.com

^(?:\d|[1-9]\d|[12]\d{2}|3[0-5]\d|36[0-4]|365\.0*)(?:\.\d+)?$

或者(更好!)

^\d+(?:\.\d+)?$

,然后以编程方式比较这些值。
后者可能是:

let data = `0.00
123.2121212
365.00
365.11
-1000
299
1000
365.1`;

let regex = /^\d+(?:\.\d+)?$/gm;
while (found = regex.exec(data)) {
    number = parseFloat(found[0]);
    if (number >= 0 && number <= 365) {
        console.log(number + " (" + found[0] + ")");
    }
}