validator

class Validator {
  static add (name, fn) {
    Validator.prototype[name] = fn
  }

  constructor () {}

  validate (data, rules) {
    let errors = {}
    rules.forEach((rule) => {
      let value = data[rule.key]
      if (rule.required) {
        let error = this.required(value)
        if (error) {
          ensureObject(errors, rule.key)
          errors[rule.key].required = error
          return
        }
      }
      // 遍歷 validators,并逐一調(diào)用對應(yīng)的函數(shù)
      let validators = Object.keys(rule).filter(key => key !== 'key' && key !== 'required')
      validators.forEach((validatorKey) => {
        if (this[validatorKey]) {
          let error = this[validatorKey](value, rule[validatorKey])
          if (error) {
            ensureObject(errors, rule.key)
            errors[rule.key][validatorKey] = error
          }
        } else {
          throw `不存在的校驗器: ${validatorKey}`
        }
      })
    })
    return errors
  }

  required (value) {
    if (value !== 0 && !value) {
      return '必填'
    }
  }

  pattern (value, pattern) {
    if (pattern === 'email') {
      pattern = /^.+@.+$/
    }
    if (pattern.test(value) === false) {
      return '格式不正確'
    }
  }

  minLength (value, minLength) {
    if (value.length < minLength) {
      return '太短'
    }
  }

  maxLength (value, maxLength) {
    if (value.length > maxLength) {
      return '太長'
    }
  }
}

function ensureObject (obj, key) {
  if (typeof obj[key] !== 'object') {
    obj[key] = {}
  }
}

export default Validator

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子本辐,更是在濱河造成了極大的恐慌,老刑警劉巖谅海,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滚婉,死亡現(xiàn)場離奇詭異凰狞,居然都是意外死亡豁陆,警方通過查閱死者的電腦和手機(jī)夏哭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献联,“玉大人,你說我怎么就攤上這事何址±锬妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵用爪,是天一觀的道長原押。 經(jīng)常有香客問我,道長偎血,這世上最難降的妖魔是什么诸衔? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颇玷,結(jié)果婚禮上笨农,老公的妹妹穿的比我還像新娘。我一直安慰自己帖渠,他們只是感情好谒亦,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著空郊,像睡著了一般份招。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狞甚,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天锁摔,我揣著相機(jī)與錄音,去河邊找鬼哼审。 笑死谐腰,一個胖子當(dāng)著我的面吹牛孕豹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怔蚌,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼巩步,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桦踊?” 一聲冷哼從身側(cè)響起椅野,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籍胯,沒想到半個月后竟闪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡杖狼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年炼蛤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝶涩。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡理朋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绿聘,到底是詐尸還是另有隱情嗽上,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布熄攘,位于F島的核電站兽愤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挪圾。R本人自食惡果不足惜浅萧,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哲思。 院中可真熱鬧洼畅,春花似錦、人聲如沸棚赔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忆嗜。三九已至己儒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捆毫,已是汗流浹背闪湾。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留绩卤,地道東北人途样。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓江醇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親何暇。 傳聞我的和親對象是個殘疾皇子陶夜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在寫程序的時候經(jīng)常需要進(jìn)行數(shù)據(jù)校驗,比如服務(wù)端對http請求參數(shù)校驗裆站,數(shù)據(jù)入庫時對字段長度進(jìn)行校驗条辟,接口參數(shù)校驗,...
    dayspring閱讀 9,832評論 0 9
  • 工作的需要:由于mongodb文檔格式靈活宏胯,缺乏關(guān)系型數(shù)據(jù)庫的范式與數(shù)據(jù)檢查約束羽嫡,因而必須在代碼層面做數(shù)據(jù)約束。于...
    dolphin叔叔閱讀 454評論 0 0
  • validator百度博客一大堆,本文是摘取的部分內(nèi)容結(jié)合在項目中使用的經(jīng)驗. 一.導(dǎo)入maven依賴 二.給需要...
    從入門到脫發(fā)閱讀 4,881評論 0 2
  • 2018年12月的第一天肩袍,冬天的太陽暖暖的杭棵,我需穿過玻璃隔斷的同事的辦公司來遠(yuǎn)遠(yuǎn)地望著這冬日里燦爛的陽光,由于自己...
    海英_b043閱讀 131評論 0 0
  • 這幾天持續(xù)失眠。 無論是午休還是晚上睡覺都翻來覆去的睡不著艰管。 想了很多事情滓侍。 我開始明白,以前自己太多事不懂蛙婴,很容...
    落葉夏天閱讀 312評論 3 1