我正在尝试创建范围 0到8759.59 的JavaScript正则表达式
我创建了2个正则表达式: 以下是我的表达方式:
regex1的
^([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9]|[1-7][0-9]{3}|8[0-6][0-9]{2}|87[0-5][0-9]|8759)(\.([0-9]|[1-4][0-9]|5[0-9]))?$
另一个范围0到8758.99的表达式不接受8760, 以下是此表达式:
Regex2
^([0-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9]|[1-7][0-9]{3}|8[0-6][0-9]{2}|87[0-5][0-9]|8758)(\.\d{1,2})?$
现在,当我尝试在Regex2和Regex1之间放置或运算时,它就没有按预期运行。
我希望它应该接受0-8759.59范围内的值
答案 0 :(得分:2)
根据OP的评论更新:(This will match anything less than 8759.60)
^8759(\.[0-5]\d?)?$|^(87[0-5][0-8]|8[0-6]\d{2}|[0-7]\d{3}|\d{1,3})(\.\d\d?)?$
更新了代码段
const regex = /^(87[0-5]\d|8[0-6]\d{2}|[0-7]\d{3}|\d{1,3})(\.[0-5]\d?)?$/;
console.log(regex.test(`0`));
console.log(regex.test(`8759.59`));
console.log(regex.test(`8759.60`));
console.log(regex.test(`10.59`));
console.log(regex.test(`10.60`));
console.log(regex.test(`8759`));
console.log(regex.test(`876`));
console.log(regex.test(`8761`));
console.log(regex.test(`123.1`));
说明:
^
字符串开头(87[0-5]\d|8[0-6]\d{2}|[0-7]\d{3}|\d{1,3})
4个替代方案 - 87[0-5]\d
87后跟0-5之间的任何数字,然后是任何数字
OR
8[0-6]\d{2}
8后跟0-6和任意两位数之间的任何内容
OR
[0-7]\d{3}
0-7后跟任意3位
OR
\d{1,3}
任意1至3位
答案 1 :(得分:1)
你可以试试这个,
^8759(?:\.[0-5]\d?)?$|^(?:(?:(?:|[1-9]|[1-9]\d|[1-7]\d{2})\d|8[0-7][0-5][0-8])(?:\.\d{1,2})?)$
已修改,因为上面的正则表达式错过了8[0-7][0-5][0-8]
不接受合法输入的点,8199,8369等
^8759(?:\.[0-5]\d?)?$|^(?:(?:(?:|[1-9]|[1-9]\d|[1-7]\d{2})\d|8(?:[0-6]\d{2}|7(?:[0-4]\d|5[0-8])))(?:\.\d{1,2})?)$
从8[0-7][0-5][0-8]
8(?:[0-6]\d{2}|7(?:[0-4]\d|5[0-8]))
答案 2 :(得分:0)
正则表达式不是用于验证数字是否属于某个范围的工具 是检查字符串是否是数字的文本表示的好工具,所以让我们将它们用于此目的,让比较运算符处理范围检查:
function validateNumber(input, min, max)
{
const re = /^\d+(\.\d*)?$/
if (re.exec(input)) {
let nb = parseFloat(input)
return min <= nb && nb <= max
} else {
return false
}
}
console.log(validateNumber('8759.60', 0, 8759.59))