Element表單驗證(1)

来源:https://www.cnblogs.com/lantuoxie/archive/2018/07/13/9305353.html
-Advertisement-
Play Games

Element表單驗證(1) 首先要掌握Element官方那幾個表單驗證的例子,然後才看下麵的教程。 Element主要使用了 "async validator" 這個庫作為表單驗證 主要分成三部分 Validate Options Rules 其中,對於我們使用Element的來說,Rules最重 ...


Element表單驗證(1)

首先要掌握Element官方那幾個表單驗證的例子,然後才看下麵的教程。

Element主要使用了async-validator這個庫作為表單驗證

async-validator主要分成三部分

  • Validate
  • Options
  • Rules

其中,對於我們使用Element的來說,Rules最重要,也是這部分內容較多的。

async-validator各部分

async-validator基本使用

import Validator from 'async-validator'

// 規則的描述
const rules = {
  name: { type: 'string', required: true }
}

// 根據規則生成驗證器
const validator = new Validator(rules)

// 要驗證的數據源
const source = {
  name: 'LanTuoXie'
}

// 驗證後的回調函數
function callback (errors, fileds) {
  if (errors) {
    // 驗證不通過,errors是一個數組,記錄那些不通過的錯誤信息
    // fileds是所有數據源的欄位名,也即上面的source的'name'
    // 驗證是根據欄位名來的,rules.name 對應 source.name。 欄位名要一樣才會驗證
  }
  // 下麵是驗證通過的邏輯
}

// 驗證數據源是否符合規則
validator.validate(source, callback)

Validate

就是上面例子中的validator.validate,是一個函數

function(source, [options], callback)

source和callback對應上面的例子。

Options

Options有兩個值

  • first: 一個布爾值,如果出現欄位不通過,終止驗證後面的欄位
  • firstFields: 布爾值或者字元串,如果驗證一個欄位時,一個規則不通過,終止驗證下個規則(一個欄位,多個規則的情況)

firstFields是針對單個欄位多規則的情況下使用,而first是針對所有欄位

Rules

最重要的還是Rules。定義rule可以有三種形式,但是rules欄位名一定要和數據源source的欄位名一致。

  • 函數的方式:{ name(rule, value, callback, source, options) {} }
  • 對象的方式: { name: { type: 'string', required: true } }
  • 數組的方式: { name: [{ type: 'string' }, { required: true }] }

上面可以看到,欄位名name可以有3種方式定義規則,在使用Element的時候還是推薦對象和數組的方式,這個兩個比較簡單,函數看情況使用。

除了typerequired還有哪些用法可以用以及有什麼用?

Rules的預設規則

  • type: 要被驗證的數據的類型如urlnumber
  • required: 是否必填
  • pattern:使用正則來驗證
  • min: 數據的長度的最小值 (數據類型必須是stringarray)
  • max: 數據的長度的最大值 (數據類型必須是stringarray)
  • len: 數據的長度必須等於這個值 (數據類型必須是stringarray)
  • enum: 數據的值必須等於這個枚舉數組某個元素 { enum: [1, 2, 3] }
  • transform: 一個鉤子函數,在開始驗證之前可以對數據先處理後驗證,如吧number轉為string後再驗證
  • message: 報錯的提示信息可以是字元串也可以是jsx標簽<span>Name is required</span>
  • validator: 自定義驗證函數以及報錯信息 validator(rule, value, callback)
  • 還有一個Deep Rules是處理object或者array類型的,使用了fieldsdefaultField
  • fields:Deep Rules的時候使用,定義下一層的欄位名以及規則
  • defaultField: Deep Rules的時候使用,所有下一層的欄位都會採用該規則,可以被fields替換

預設的Type

  • string:必須是String類型,規則不設置type預設是這個
  • number:必須是Number類型,如果後臺返回的數據是字元串,可以用transform轉為Number類型,字元串類型的數字('12')不會通過,要註意
  • boolean: 必須是Boolean類型
  • method: 必須是Function
  • regexp:必須是正則RegExp
  • integer:是Number類型的正整數
  • float: 是Number類型的浮點數
  • array: 是Array.isArray通過的數組
  • object: Array.isArray不通過的Object類型
  • enum: 要先定義enum,然後值必須是enum某個值
  • date: 必須是Date對象的實例
  • url: String類型且符合鏈接格式
  • hex
  • email: String類型,且符合郵箱格式

Deep Rules使用demo

cosnt urls = ['http://www.baidu.com', 'http://www.baidu.com']
// 一個urls的數組,
const rules = {
  urls: {
    type: 'array',
    required: true,
    defaultField: { type: 'url' }
  }
}
const ids = {
  name: 'LanTuoXie',
  age: 12,
  spc: '帥'
}

const rules = {
  ids: {
    type: 'object',
    required: true,
    fields: {
      name: { type: 'string', required: true },
      age: { type: 'number', required: true, tranform: Number },
      spc: { type: 'string', required: true }
    }
  }
}

自定義驗證validator

validator(rule, value, callback)

  • rule: 記錄了驗證欄位的欄位名以及規則的信息
  • value: 要驗證的值
  • callback: 如果callback()代表驗證通過,如果callback(new Error('錯誤要提示的信息'))代表驗證不通過
// 驗證是[min, max]範圍內的正整數
const betweenInt = (min, max) => (rule, v, cb) => {
  const isBetween = v >= min && v <= max
  const isInt = /^[0-9]+$/.test(v)
  if (isBetween && isInt) return cb()

  return cb(new Error(`要求是在${min}到${max}的正整數 [${min}, ${max}]`))
}

const rules = {
  num: { validator: betweenInt(1, 5), required: true }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要用於調試,顯示信息,重點看例子在瀏覽器 JavaScript 中,通常 window 是全局對象, Node.js 中的全局對象是 global####__filename__filename 表示當前正在執行的腳本的文件名。它將輸出文件所在位置的絕對路徑,且和命令行參數所指定的文件名不一定相同 ...
  • 第一階段: C/S(client server) B/S(browser server) 網頁製作 + 技術棧: PhotoShop、HTML、CSS 第二階段: 從靜態到動態,從後端到前端 前端開發工程師 前後端分離 + 後臺: 完成數據的分析和業務邏輯編寫(包含API介面編寫) + 前端: 網頁 ...
  • 先上源碼,版本是ES6 13行常規(700bytes) shortest snake game.html 壓縮後的500bytes(當然兩處document還是可以用eval壓縮的) index.500bytes.html 之前很火的20行代碼地址(有BUG)(900bytes) hj7jay/ar ...
  • 冒泡的概念就是 當子元素觸發事件的時候 相應的祖宗十八代素也會觸發相同的事件(前提父元素也添加了一樣的事件)eg:兒子 有一個onclick 祖宗十八代 也有onclick 當點擊兒子的時候 祖宗十八代的點擊事件也會被觸發 有時候這種情況會導致很多問題 所以要阻止冒泡 只有被點擊的元素才觸發事件 不... ...
  • 一. 什麼是消息隊列? 消息(Message)是指在應用間傳送的數據。消息可以非常簡單,比如只包含文本字元串,也可以更複雜,可能包含嵌入對象。 消息隊列(Message Queue)是一種應用間的通信方式,消息發送後可以立即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而 ...
  • // my.js function $(id){return document.getElementById(id)};function show(obj){obj.style.display = "block"};function hide(obj){obj.style.display = "no ...
  • 最近項目中客戶需要實現身份證識別功能,合理計划了之後決定使用百度ai的身份證識別。 身份證識別是文字識別的一種,類似的功能有很多比如駕駛證識別等等,原理都是相同的。 對於前端初學者來說,如果要實現這種功能靠頁面,js是實現不了的,可以確定地說就是讓後臺配合實現。實現過程是上傳一張圖片給後臺,後臺使用 ...
  • https://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-file/ 侵刪 1.H5 download屬性 downFile(下載地址, 保存名稱); 2.iframe方式 3.form方式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...