## formVerification.js
### formVerification.js 是什么?
formVerification.js 是一個數據驗證器,可用于前端表單數據的驗證。
> 通過規則來控制驗證邏輯,以后如果不同模塊組合會有不同的驗證規則(業務),那么直接動態生成相應的驗證規則配置就可以了,通過配置來解耦驗證邏輯,使得代碼更易讀和更易于維護。
*****
### formVerification.js 和 jquery-validation 的區別?
[jquery-validation](https://jqueryvalidation.org/) 是最優秀的開箱即用前端表單驗證插件,沒有之一; formVerification 是一個數據規則驗證器,并不能直接用于表單,你可以使用它來封裝一個強大的表單驗證器,非常簡單,只需要生成規則來校驗就可以。
如果你需要快速的給已有表單加入驗證規則,jquery-validation 將是最好的選擇,但如果你需要做復雜的業務規則校驗, formVerification.js 或能夠幫到你。
*****
### php 版本?
對,php 也需要這樣的驗證器,「配置就是規則,規則就是業務」 ,這么好的東西,php 當然也需要。
沒有特殊說明時,API 與 js 版是一致的。
php 版本找時間在整理出來...
*****
### 完整規則形式:
```javascript
fieldName: {
title: '變更后 聯系人姓名',
special: '^',
selector: '[name^=sqrname], [name^=newsqrname]',
range: 0,
join: function (el) {
return $('[name=is-up-lianxi]:checked').val() == 1;
},
rule: [
{
exp: 'required',
msg: '必填'
}
],
form: 'myform',
},
```
驗證器屬性解釋:
| 序號 | 屬性名 | 值類型 | 說明 | 是否必要 | 默認值 | 使用說明 |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | fieldName | string | 要驗證的字段名稱 | 是 | | 如:lxname |
| 2 | title | string | 字段名稱 | 是 | | 如:申請人。規則提示消息默認會拼接此值 |
| 3 | special | string | 輔助匹配 fieldName 屬性的 | 否 | | 可用值:`^`, `$`, `~`, `*`, `!`;`special: '^'` => `[name^=lxname]` |
| 4 | selector | string | 選擇器 | 否 | | 如果需要匹配的`inputEls` 太復雜,`special` 也難以勝任,就可以使用 `selector` 屬性。優先級最高,無視 `fieldName`和`special`了 |
| 5 | range | int,array | 匹配的`inputEls` Range | 否 | | int分正數 和負數 兩種情況:+int => int; -1 => \[1, ~\] |
| 6 | join | string,callback | 關聯條件 | 否 | | 值類型為 string 時,表示全局函數名/對象名;只有滿足關聯條件時才需要對當前 `inputEl` 啟用**本條驗證規則**(粒度精細到可以控制字段的每一條驗證規則);函數實參為 val 和當前 `inputEl` 和 當前驗證規則 ,即:`(val, inputEl, rule)` ;函數返回值為布爾值,表示是否滿足關聯條件 |
| 7 | must | string,callback,bool | 字段是否必須存在 | 否 | true | 當 inputEls/inputEl 不存在時,默認為不通過驗證,返回“字段不存在”提示,本屬性可以控制字段不存在時的處理規則;值類型為 string 時,表示全局函數名/對象名;函數實參為 **當前選擇器 selector** `(inputElSelector, inputElsSelector, eq)` ;函數返回值為布爾值,true: 字段必須存在,false: 可以允許字段不存在 |
| 8 | rule | array | 驗證規則 | 否 | `[{ exp: 'required' }]` | 見:**規則屬性解釋** |
| 9 | form | string | 表單名稱 | 否 | | 有該屬性時,字段的 匹配 `inputEls` 會受其(父作用域)限定,它的優先級最高,比 `selector`屬性 還高 |
*****
#### 規則屬性解釋:
> 規則屬性 的 每條規則(如果有多個匹配的話) 對 每一個`inputEl匹配`(如果有多個匹配的話) 的值進行驗證,只有全部驗證通過才為 `通過驗證` ,否則為 `不通過驗證` ,當某個規則驗證不通過時,驗證器會立即返回驗證提示并停止運行,不繼續驗證后續規則及其他字段了。
> 驗證時,如果匹配 inputEl 不存在則報字段不存在,為不通過驗證。(注意:must 屬性會影響此)
| 序號 | 屬性名 | 值類型 | 說明 | 是否必要 | 默認值 | 使用說明 |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | exp | string,callback | 規則表達式 | 是 | | 見:**exp屬性說明** |
| 2 | msg | string,callback | 規則驗證不通過提示 | 否 | exp=required 時,默認值為 “必填”,否則為 “不合法” | 值類型為 string 時,以`:`開頭時表示全局函數名/對象名,否則為msg;為函數時,函數實參為 `(val, inputEl, rule)` ;函數返回值為字符串,即msg |
*****
#### exp屬性說明
| 序號 | 表達式 | 值類型 | 表達式類型 | 說明 |
| --- | --- | --- | --- | --- |
| 1 | :string | string | 自定義函數,如:`:fun`,`:js.fun` | 以`:`開頭時表示全局函數名/對象名,函數實參為 `(val, inputEl, rule)` ;函數返回值為布爾值時表示是否通過驗證,返回字符串時 表示不通過驗證,返回值為不合法提示 |
| 2 | callback | callback | 自定義回調 | 函數實參為 `(val, inputEl, rule)` ;函數返回值為布爾值時表示是否通過驗證,返回字符串時 表示不通過驗證,返回值為不合法提示 |
| 3 | `/^\d+$/ig` | object | 正則表達式模式 | 用戶自定義正則表達式的模式 用戶自定義正則表達式驗證規則 |
| 4 | `'/^\\d+$/ig'` | string | 正則表達式字符串 | 用戶自定義正則表達式驗證規則,以 `/` 開頭的表示正則,注意 `/\d/` 字符串形式需要寫成 `'/\\d/'` |
| 3 | required | string | 內置規則 | 非空字符串檢查,默認 `string: $.trim(v)` 后再判斷 |
| 4 | email | string | 內置規則 | 檢查是否為合法郵箱字符串 |
| 5 | mobile | string | 內置規則 | 檢查是否為合法手機號碼字符串 |
| 6 | url | string | 內置規則 | 檢查是否為合法url字符串 |
| ... | | | | |
| \* | | | 相等規則 | **如果exp都不滿足上述表達式規則,則表示為 相等規則**,如 `exp: 123` 時,`val === '123'` 才為通過驗證。 |
*****
last update: 2019-12-28