Skip to content

Repository files navigation

egg-valid

A better Validation egg plugin based on @killara/validation

NPM versionbuild statusTest coverageDavid depsKnown Vulnerabilitiesnpm download

Install

$ npm i egg-valid -S

Usage

// configexports.valid={enable: true,package: 'egg-valid',};// controllerclassHomeControllerextendsController{asyncindex(){const{ app, ctx }=this;construle={username: 'required|alpha'};consterrors=awaitapp.validator.validate(ctx.request.body,rule)// ...}}

Rule

Derived from @killara/validation

  • accepted

    • string style: field: 'accepted'
    • object style: field: { accepted: true }
  • alpha

    • string style: field: 'alpha:6' or field: 'alpha:len=6'
    • object style: field: { alpha: { len: 6 } }
  • confirmed

    Rule confirmed: the field need to have the same value as the value that be filled by field_confirmation. We can change field_confirmation to any names with confirmed:"custom"

    • string style: field: 'confirmed' or field: 'confirmed:"custom_field_name"'
    • object style: field: { confirmed: "custom_field_name" }
  • date

    • string style: field: 'date'
    • object style: field: { date: true }
  • datetime

    • string style: field: 'datetime'
    • object style: field: { datetime: true }
  • time

    • string style: field: 'time'
    • object style: field: { time: true }
  • email

    • string style: field: 'email:true'
    • object style: field: { email: true }
  • in

    • array style: field: [ 'basketball', 'football' ]
    • object style: field: { in: [ 'basketball', 'football' ] }
  • money

    • string style: field: 'money' or field: 'money:0'field: 'money:2' (default)
    • object style: field: { money: { decimal: true } } or field: { money: { decimal: 0 } } or field: { money: { decimal: 2 } }
  • numeric

    • string style: field: 'numeric:6' or field: 'numeric:len=6'
    • object style: field: { numeric: { len: 6 } }
  • regexp

    • string style: field: 'regexp:"^123456$"'
    • object style: field: { regexp: new RegExp(/abc/, 'i') } or field: { regexp: /^[0-9a-zA-z]{8,16}$/ }
  • required

    • string style: field: 'required' or field: 'required:true'
    • object style: field: { required: true }

More rules

Custom rules

  • phone (currently support China phone number only)
    • string style: field: 'required|phone'
  • password (length: 8-18, alphanumeric and &*;+$,?#[]%)
    • string style:field: 'password' or field: 'password:min=8,max=18' or field: 'password:"^[a-z0-9!()-._@#]{8,18}$"'
  • captcha (phone auth code)
    • string style:field: 'captcha' or field: 'captcha:6'
    • object style: field: { captcha: { len: 6} }

Messages

Customize validation messages

Via API

classHomeControllerextendsController{asyncindex(){const{ app, ctx }=this;construle={username: 'required|alpha:6'};constmessages={'username.alpha': '该字段应该为长度为6的字母串'};consterrors=awaitapp.validator.validate(ctx.request.body,rule,messages);if(errors){// ...}else{// ...}}}

Via configuration

exports.valid={rules: {custom: field=>context=>params=>{// We can get `app` and `ctx` from contextconst{ app, ctx, options }=context;//... return a boolean}},messages: {custom: 'a custom message...',},};

API

validation.addRule(name: string, ruleFunc: (field: string) => (context: object) => (params: object) => bool)

  • Add custom rule

validation.addMessage(name: string, message: string)

  • Add custom message

License

MIT

About

👮 Validation plugin for eggjs

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages