1. 程式人生 > >餓了麼元件庫element-ui正則表示式驗證表單,後端驗證表單

餓了麼元件庫element-ui正則表示式驗證表單,後端驗證表單

vue+elementui 提高開發效率,以下為form表單驗證例子。包含自定義驗證等。

1. 以中國大陸手機號驗證為例

// 這是組價的程式碼
<el-form-item prop="mobile">
    <el-input type="text" v-model="ruleForm.mobile" auto-complete="off" placeholder="請輸入手機號"></el-input>
</el-form-item>

// 這是rules的程式碼
mobile: [
    { validator: validateMobile, trigger: 'blur'
}, { required: true, message: '請輸入手機號', trigger: 'blur' }, { pattern: /^1[34578]\d{9}$/, message: '目前只支援中國大陸的手機號碼' } ],

在element-ui的原始碼中搜索blur,你會很容易看到除了blur 還有focus、input,多個使用“,”分隔

2. 表單區域性提交後端驗證

在一些輸入專案較多的表單提交中,比如說註冊時填寫的使用者名稱,通常我們會對使用者名稱是否重複進行驗證,這是就需要呼叫服務來驗證,這種略顯複雜的驗證,就需要自定義驗證規則來實現。看下面的程式碼:

function validateMobile(rule, value, callback) {
                       var MobileRegex = /^1[0-9]{10}$/;
                         if (!MobileRegex.test(value)) {
                             callback(new Error('手機號碼格式不正確!'))
                         } else {
                             callback();
                         }
                     }

注意:自定義規則中每個執行流程中都必須附帶callback(),這樣才能明確通過驗證的情況下去掉輸入框上的loading。要顯示的錯誤提示則可以new Error(“xxxx”)即可。

3. 綜合來看

通常可以把所有規則都寫在自定義的規則中,即可實現較為複雜的驗證,實際上我們可以再validatePass裡面呼叫根例項下所有data methods...,一個很簡單的例子是實現兩次輸入的密碼是否相同的驗證,看下面的程式碼:

     <div id="app">
             <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
                  <el-form-item label="活動名稱" prop="name">
                    <el-input v-model="ruleForm.name"></el-input>
                  </el-form-item>
                 <el-form-item label="手機號碼"  prop="mobile">
                     <el-input v-model="ruleForm.mobile"></el-input>
                 </el-form-item>
                  <el-form-item label="活動區域" prop="region">
                    <el-select v-model="ruleForm.region" placeholder="請選擇活動區域">
                      <el-option label="區域一" value="shanghai"></el-option>
                      <el-option label="區域二" value="beijing"></el-option>
                    </el-select>
                  </el-form-item>
                  <el-form-item label="活動時間" required>
                    <el-col :span="11">
                      <el-form-item prop="date1">
                        <el-date-picker type="date" placeholder="選擇日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
                      </el-form-item>
                    </el-col>
                    <el-col class="line" :span="2">-</el-col>
                    <el-col :span="11">
                      <el-form-item prop="date2">
                        <el-time-picker type="fixed-time" placeholder="選擇時間" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
                      </el-form-item>
                    </el-col>
                  </el-form-item>
                  <el-form-item label="即時配送" prop="delivery">
                    <el-switch v-model="ruleForm.delivery"></el-switch>
                  </el-form-item>
                  <el-form-item label="活動性質" prop="type">
                   <el-checkbox-group v-model="ruleForm.type">
                      <el-checkbox label="1"  name="type">美食/餐廳線上活動</el-checkbox>
                      <el-checkbox label="2" name="type">地推活動</el-checkbox>
                      <el-checkbox label="3" name="type">線下主題活動</el-checkbox>
                      <el-checkbox label="4" name="type">單純品牌曝光</el-checkbox>
                    </el-checkbox-group>
                  </el-form-item>
                  <el-form-item label="特殊資源" prop="resource">
                    <el-radio-group v-model="ruleForm.resource">
                      <el-radio label="線上品牌商贊助"></el-radio>
                      <el-radio label="線下場地免費"></el-radio>
                    </el-radio-group>
                  </el-form-item>
                  <el-form-item label="活動形式" prop="desc">
                    <el-input type="textarea" v-model="ruleForm.desc"></el-input>
                  </el-form-item>
                  <el-form-item>
                    <el-button type="primary" @click="submitForm('ruleForm')">立即建立</el-button>
                    <el-button @click="resetForm('ruleForm')">重置</el-button>
                  </el-form-item>
          </el-form>


        </div>
        <script src="https://unpkg.com/[email protected]/dist/vue.js"></script>


<script src="//unpkg.com/[email protected]/lib/index.js"></script>
<script  type="text/javascript">
    var app = new Vue({
        el: "#app",
        data: {
            ruleForm: {
                name: '',
                mobile: "",
                region: '',
                date1: '',
                date2: '',
                delivery: false,
                type: [],
                resource: '',
                desc: ''
            },
            rules: {
                name: [
                  { required: true, message: '請輸入活動名稱', trigger: 'blur' },
                  { min: 3, max: 5, message: '長度在 3 到 5 個字元', trigger: 'blur' }
                ],
                mobile: [
                  { required: true, message: '請輸入手機號碼', trigger: 'blur' },
                 {
                     validator: function (rule, value, callback) {
                         var MobileRegex = /^1[0-9]{10}$/;
                         if (!MobileRegex.test(value)) {
                             callback(new Error('手機號碼格式不正確!'))
                         } else {
                             callback();
                         }
                     }, trigger: 'blur'
                 }
                ],
                region: [
        { required: true, message: '請選擇活動區域', trigger: 'change' }
                ],
                date1: [
            { type: 'date', required: true, message: '請選擇日期', trigger: 'change' }
                ],
                date2: [
                  { type: 'date', required: true, message: '請選擇時間', trigger: 'change' }
                ],
                type: [
                  { type: 'array', required: true, message: '請至少選擇一個活動性質', trigger: 'change' }
                ],
                resource: [
                  { required: true, message: '請選擇活動資源', trigger: 'change' }
                ],
                desc: [
                  { required: true, message: '請填寫活動形式', trigger: 'blur' }
                ]
            }
        }, methods: {
            submitForm: function (formName) {
                var Self = this;
                this.$refs[formName].validate(function (valid) {
                    if (valid) {
                        alert(JSON.stringify(Self.ruleForm));
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm: function (formName) {
                this.$refs[formName].resetFields();
            }


        }
    });
</script>

就這麼簡單就可以實現非vuejs情況下是非囉嗦的驗證。而且樣式也不會很醜,當然了任然可以選擇自定義樣式。這個以後再記錄。

效果圖如下:


相關推薦

元件element-ui表示式驗證驗證

vue+elementui 提高開發效率,以下為form表單驗證例子。包含自定義驗證等。 1. 以中國大陸手機號驗證為例 // 這是組價的程式碼 <el-form-item prop="mobile"> <el-input type="text

仿購物車效果(UI效果)

右列表標題懸停 左右列表滑動時聯動 新增購物車時動畫效果 右列表標題懸停&左右列表滑動時聯動 gradle新增依賴 compile 'se.emilsjolander:stickylisthead

VUE 元件 1.4 table 屬性之一

<el-table :data="Data.list" style="width: 100%" tooltip-effect="light"> 程式碼中有二點介紹 :data 繫結的資料是 VUE 的 data.list 模板樣式風格是淺色系的。 tooltip

LeetCode題10:表示式匹配——JavaScript解答

題目描述: 給定一個字串 (s) 和一個字元模式 §。實現支援 ‘.’ 和 ‘*’ 的正則表示式匹配。 ‘.’ 匹配任意單個字元。 ‘*’ 匹配零個或多個前面的元素。 匹配應該覆蓋整個字串 (s) ,

Python 之SRE表示式 re 原始碼

# # Secret Labs' Regular Expression Engine # # re-compatible interface for the sre matching engine # # Copyright (c) 1998-2001 by Secret

表示式(模式器匹配器)及java中的日期表示

正則表示式 正則表示式:用於匹配某些特定字串的一個規則。 沒有學會使用正則表示式的時候,我們遇到過這麼一個需求-----校驗使用者名稱是否合法? 具體要求如下: 1)使用者名稱長度必須在6到15之間 2)必須是字母數字組合 非正則具體實現如下 public clas

Python中表示式對單個字元多個字元匹配邊界等使用

         Regular Expression,正則表示式,又稱正規表示式、正規表示法、正則表示式、規則表示式、常規表示法(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),是電腦科學的一個概

Java表示式過濾、替換將一段文字中的英語單詞分別提取出並統計詞頻按詞頻排序。

最近在學習自然語言處理,在建立基礎標籤庫時,遇到一個需要提取語料中的英文單詞的工作,做好了現在來和大家分享下。 實現效果:讀取檔案內容,把其中的英文單詞提取出,並統計詞頻。提取時,原本不是連在一起的單詞可以分開獨立提取,例如:我的PPT和WORD,可以提取出PPT,WORD兩個單詞。 基本思

表示式的一些知識留作

. 匹配任意字元,包括空字元 (星號) 表示前一個字元出現0次到任意次 .* 表示匹配任意長度的字串,可以是空字串 ? 表示前一個字元(或者說子表示式)出現0次到1次 如有這麼幾個檔案a.xls a.xlsx a.xlsm a.xlsmx a.xls.? 匹配a.xls a.xlsx a.xls

表示式中的模式函式及使用規則

一、正則表示式轉義 正則中的特殊符號: . * ? $ [] {} () | \ 正則表示式匹配特殊字元如果需要加 \ 表達轉義,比如: pattern

常用表示式(高亮markdown)

校驗數字的表示式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(

python表示式 簡單的手機號碼格式的驗證

import re #手機號的匹配 phone = re.compile('^(13(7|8|9|6|5|4)|17(0|8|3|7)|18(2|3|6|7|9)|15(3|5|6|7|8|9))\d{8}$') num = input('請輸入手機號:') if re.match(phone

表示式真的很騷可惜你不會寫!!!

本文旨在用最通俗的語言講述最枯燥的基本知識 文章提綱: 元字元 重複限定符 分組 轉義 條件或 區間 正則表示式在幾乎所有語言中都可以使用,無論是前端的JavaScript、還是後端的Java、c#。他們都提供相應的介面/函式支援正則表示式。

如何利用selenium+python獲取click()方法 請求返回的結果 包含: javascript 陣列操作表示式匹配返回陣列js兩個陣列取差集再去重 by qiweb 2018

技術交流q and v信:908701702  ,熊貓燒香 qiweb2018 python程式碼思路【開啟網頁--定位元素--點選請求--獲取請求後伺服器返回的資訊】: # coding=utf-8 from selenium import webdriver from

表示式真的很騷可惜你不會寫

本文旨在用最通俗的語言講述最枯燥的基本知識 文章提綱: 元字元 重複限定符 分組 轉義 條件或 區間 正則表示式在幾乎所有語言中都可以使用,無論是前端的JavaScript、還是後端的Java、c#。他們

JavaScript:表示式:基礎語法

一、正則表示式基礎語法(Regular Expression) 1、正則表示式的建立方式:物件new RegExp(正則表示式) 或者 /正則表示式/ 虛擬碼 var reg = new RegExp(正則表示式); var reg = /正則表示式/; 2

常用的表示式整理【轉載防丟失】

轉載文章,好資源,防丟失。原文連結: http://blog.cspojie.cn/2017/09/26/常用的正則表示式整理/ 一、校驗數字的表示式 1 數字: ^[0-9]$ 2 n位的數字: ^\d{n}$ 3 至少n位的數字: ^\d{n,}$ 4 m-n位的數字:^

python----使用re表示式刷選資料去重列表取特定行資料(適用於web的html回包資料提取)

python—-使用re正則表示式刷選資料,去重,列表,取特定行資料(適用於web的html回包資料提取) 環境配置:對目標伺服器的日誌檔案進行刷選特定資料(192.168.4.27) /usr/

表示式——判斷字串組成第一個必須是字母後面可以是字母、數字、下劃線總長度為5-20

//判斷字串是否是這樣組成的,第一個必須是字母,後面可以是字母、數字、下劃線,總長度為5-20 var c = /^[a-zA-Z]\w{4,19}$/; // /是轉義 ^ 是開頭 [

表示式--影象化形式

最近看了一篇關於正則表示式的學習筆記,覺得講的非常好,更有圖形化的神器相助,想不學會都難,所以想轉給大家看看。 話說不是開發為啥要學正則表示式這種看似很晦澀的東西呢,因為現在很多搜尋的場景都是支援正則表示式的,學會了正則表示式就有如一把利劍在手。 本文較長,建議抽40分鐘完整的時間一次讀