日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

需求場景:因為業務中需要去調用第三方的接口,某些字段需要做校驗,但是接口返回的規則都是一些提示,像這樣的: '金額區間: 140≤x≤350USD'、'最低金額: x≥140.89USD'、'三邊之和: 10.0cm≤x≤20.0cm'...需要自己去里面提取規則和上下限值來判斷。

范圍總共有 16 種情況:

  1. min ≤ x ≤ max
  2. min ≤ x < max
  3. min < x ≤ max
  4. min < x < max
  5. max ≥ x ≥ min
  6. max ≥ x > min
  7. max > x ≥ min
  8. max > x > min
  9. x ≤ max
  10. x < max
  11. x ≥ min
  12. x > min
  13. min ≤ x
  14. min < x
  15. max ≥ x
  16. 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 = true

  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 = (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)

面對這種很無奈的需求,一定要自己從邏輯上梳理清楚,不要漏掉任何一種可能的情況

TODO

規則里如果有數字,上面提取出來的 numFirst 和 numTwo 會不對,如:兩短邊之和*2:x≤120cm,方法里的數字提取需優化

分享到:
標簽:JavaScript
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定