需求场景:因为业务中需要去调用第三方的接口,某些字段需要做校验,但是接口返回的规则都是一些提示,像这样的: '金额区间: 140≤x≤350USD'、'最低金额: x≥140.89USD'、'三边之和: 10.0cm≤x≤20.0cm'...需要自己去里面提取规则和上下限值来判断 。
范围总共有 16 种情况:
- min ≤ x ≤ max
- min ≤ x < max
- min < x ≤ max
- min < x < max
- max ≥ x ≥ min
- max ≥ x > min
- max > x ≥ min
- max > x > min
- x ≤ max
- x < max
- x ≥ min
- x > min
- min ≤ x
- min < x
- max ≥ x
- max > x
function isRangeIn(x, str) {if (!/^[+-]?(0|([1-9]d*))(.d+)?$/.test(x)) {console.log('当前值非数字')return}if (!str || (str && typeof str !== 'string')) return true // 规则字符串不存在默认通过const arr = str.match(/d+(.d+)?/g)if (!arr || !arr.length) return true // 未提取到范围数据默认通过const numFirst = +arr[0]const numTwo = +arr[1]let isVali = trueif (str.includes('≤x≤')) {isVali = (numFirst <= x) && (x <= numTwo)} else if (str.includes('≤x<')) {isVali = (numFirst <= x) && (x < numTwo)} else if (str.includes('<x≤')) {isVali = (numFirst < x) && (x <= numTwo)} else if (str.includes('<x<')) {isVali = (numFirst < x) && (x < numTwo)} else if (str.includes('≥x≥')) {isVali = (numFirst >= x) && (x >= numTwo)} else if (str.includes('≥x>')) {isVali = (numFirst >= x) && (x > numTwo)} else if (str.includes('>x≥')) {isVali = (numFirst > x) && (x >= numTwo)} else if (str.includes('>x>')) {isVali = (numFirst > x) && (x > numTwo)} else if (str.includes('x≤')) {isVali = x <= numFirst} else if (str.includes('x<')) {isVali = x < numFirst} else if (str.includes('x≥')) {isVali = x >= numFirst} else if (str.includes('x>')) {isVali = x > numFirst} else if (str.includes('≤x')) {isVali = numFirst <= x} else if (str.includes('<x')) {isVali = numFirst < x} else if (str.includes('≥x')) {isVali = numFirst >= x} else if (str.includes('>x')) {isVali = numFirst > x}return isVali}// 测试// const a = isRangeIn(6.9999999999, '第三长边: 4.0cm<x<7.0cm')// const a = isRangeIn(11, 'x>10.0cm')// const a = isRangeIn(9, '两长边之和: 10.0cm≤x≤20.0cm')// const a = isRangeIn('141', '金额区间: 140≤x≤350USD')// console.log(a)
【JavaScript中根据字符串中的范围规则,判断当前值是否符合条件】面对这种很无奈的需求,一定要自己从逻辑上梳理清楚,不要漏掉任何一种可能的情况TODO
规则里如果有数字,上面提取出来的 numFirst 和 numTwo 会不对,如:两短边之和*2:x≤120cm,方法里的数字提取需优化
推荐阅读
- 深入了解 JavaScript 内存泄漏
- 李彦宏:中国基本不会再出一个OpenAI,创业公司重做ChatGPT没多大意义
- 一道题,测试你是否“睡眠障碍”,中医推荐几个方法缓解失眠
- 罗兰|曝于文红老公出轨成性!曾睡4000多名中国姑娘,每月零用钱仅5万
- 泽口靖子|昭和美人泽口靖子,皇太子的梦中情人,世界首富的追求对象
- 胡萝卜里面有什么维生素
- 小茴香能下奶吗
- 李崇霄|中国首位公开艾滋病女孩朱力亚,自曝被黑人男友传染,却仍爱他很深
- 冯淬帆|王晶被骂“王八蛋”反击冯淬帆:中国台湾是一个奇怪的地方
- 招聘|曹德旺谈大学生热衷考公,观点中肯却遭反驳,不如直说给你打工