egg-valid
A better Validation egg plugin based on @killara/validation
Install
$ npm i egg-valid -S
Usage
// configexportsvalid = enable: true package: 'egg-valid';// controller async { const app ctx = this; const rule = username: 'required|alpha' ; const errors = await appvalidator // ... }
Rule
@killara/validation
Derived from-
accepted
- string style:
field: 'accepted'
- object style:
field: { accepted: true }
- string style:
-
alpha
- string style:
field: 'alpha:6'
orfield: 'alpha:len=6'
- object style:
field: { alpha: { len: 6 } }
- string style:
-
confirmed
Rule
confirmed
: thefield
need to have the same value as the value that be filled byfield_confirmation
. We can changefield_confirmation
to any names withconfirmed:"custom"
- string style:
field: 'confirmed'
orfield: 'confirmed:"custom_field_name"'
- object style:
field: { confirmed: "custom_field_name" }
- string style:
-
date
- string style:
field: 'date'
- object style:
field: { date: true }
- string style:
-
datetime
- string style:
field: 'datetime'
- object style:
field: { datetime: true }
- string style:
-
time
- string style:
field: 'time'
- object style:
field: { time: true }
- string style:
-
email
- string style:
field: 'email:true'
- object style:
field: { email: true }
- string style:
-
in
array
style:field: [ 'basketball', 'football' ]
- object style:
field: { in: [ 'basketball', 'football' ] }
-
money
- string style:
field: 'money'
orfield: 'money:0'
field: 'money:2'
(default) - object style:
field: { money: { decimal: true } }
orfield: { money: { decimal: 0 } }
orfield: { money: { decimal: 2 } }
- string style:
-
numeric
- string style:
field: 'numeric:6'
orfield: 'numeric:len=6'
- object style:
field: { numeric: { len: 6 } }
- string style:
-
regexp
- string style:
field: 'regexp:"^123456$"'
- object style:
field: { regexp: new RegExp(/abc/, 'i') }
orfield: { regexp: /^[0-9a-zA-z]{8,16}$/ }
- string style:
-
required
- string style:
field: 'required'
orfield: 'required:true'
- object style:
field: { required: true }
- string style:
Custom rules
- phone (currently support China phone number only)
- string style:
field: 'required|phone'
- string style:
- password (length: 8-18, alphanumeric and &*;+$,?#[]%)
- string style:
field: 'password'
orfield: 'password:min=8,max=18'
orfield: 'password:"^[a-z0-9!()-._@#]{8,18}$"'
- string style:
- captcha (phone auth code)
- string style:
field: 'captcha'
orfield: 'captcha:6'
- object style:
field: { captcha: { len: 6} }
- string style:
Messages
Customize validation messages
Via API
async { const app ctx = this; const rule = username: 'required|alpha:6' ; const messages = 'username.alpha': '该字段应该为长度为6的字母串' ; const errors = await appvalidation; if errors // ... else // ... }
Via configuration
exportsvalid = rules: { // We can get `app` and `ctx` from context const 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