驗證規則的定義通常有兩種方式,如果你使用了驗證器的話,通常通過`constructor`構建函數中的`super()`方法定義驗證規則,而如果使用的是獨立驗證的話,則是通過`setRule`方法進行定義。
## super定義
```
class LoginValidate extends Validate
{
constructor()
{
const rules = {
'user' : 'require|mail|max:30',
'pass' : 'require|chsDash|length:6,16'
}
super(rules)
}
}
```
>[danger] 系統內置了一些常用的驗證規則可以滿足大部分的驗證需求,具體每個規則的含義參考內置規則一節。
> 一個字段可以使用多個驗證規則(如上面的`user`字段定義了`require`和`max`兩個驗證規則)
## 方法定義
如果使用的是獨立驗證(即手動調用驗證類進行驗證)方式的話,通常使用`setRule`方法進行驗證規則的設置,舉例說明如下。
~~~
$data = {
'user' : 'admin@admin.com',
'pass' : '123456'
};
const rules = {
'user' : 'require|mail|max:30|diy:1111',
'pass' : 'require|chsDash|length:6,16'
};
const login = new Validate();
login.setRule(rules)
if(!login.check($data)){
console.log(login.getError())
}
~~~
## 自定義驗證規則
系統內置了一些常用的規則(參考后面的內置規則),如果不能滿足需求,可以在驗證器重添加額外的驗證方法,例如:
~~~
class User extends Validate
{
constructor(){
const rules = {
'name' : 'require|check_name:michael',
'email' : 'mail'
};
const message = {
'name.require' : '用戶名必須填寫',
'email.mail' : '填入的郵箱不是有效的電子郵件地址'
}
super(rules,message)
}
check_name(value, rule, data = {})
{
return value === rule ? true : '用戶名錯誤';
}
}
~~~
驗證方法可以傳入的參數共有`4`個(后面兩個根據情況選用),依次為:
* 驗證數據
* 驗證規則
* 全部數據(數組)
* 其他數據(數組)如`check_name:michael:1:2` 此處為除去`michael`以外的`1,2`數據
## 自定義正則規則
預定義一個或多個正則規則
~~~
this.setRegex({
"qq":/[1-9][0-9]{4,}/
});
~~~
然后就可以和其他規則一樣使用
~~~
this.setRule({
"value" :"qq"
});
this.setMsg({
"value.qq" :"請輸入正確的QQ格式"
});
~~~