angularjs实现

app.directive('checkDomainCommon', function () {  return {    restrict: 'A',    require: 'ngModel',    link(scope, ele, attrs, ctrl) {      ctrl.$validators.checkDomainCommon = function (modelVal) {        // reg为域名的正则的正则        let reg =/^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][--a-zA-Z0-9]{0,62})+\.?/        if (attrs['required'] === undefined || attrs['required'] === false) {          return true        }        else if(!modelVal){          return false;        }else {          //退出输出类型判断,避免谬误的将指令绑定在如number类型的输入框上          if(typeof modelVal !== 'string'){            console.error('the type of input value is not string,can not check domain format!');            return false;          }          // 零碎中现有用逗号分隔的,和分号分隔的做兼容。都是英文符号          // 中横线隔开的是domain范畴,也须要验证是否合乎输出标准          let domainArr = attrs['separatorReg']? modelVal.split(new RegExp(attrs['separatorReg'])):modelVal.split(/,|;|-/);          let domain = "";          let isOk = false;          for (let i = 0; i < domainArr.length; i++) {            domain = domainArr[i];            if (reg.test(domain)) {              isOk = true;            } else {              // 只有一个不合符,未通过验证,间接break              isOk = false;              break;            }          }          return isOk;        }      }    }  }});

vue实现

import Vue from 'vue'const domianReg = '';// 注册一个全局自定义指令 `v-checkDomain`Vue.directive('checkDomain', {    // 当被绑定的元素插入到 DOM 中时……    inserted: function (el, binding, vNode) {        el.addEventListener('keyup', function (event) {            // 首先去除已有款式            //removeErrorStyle                        // 判断是否是否必填            let isRequired = binding.value.required            if (isRequired) {                if (!el.value || el.value === '') {                    //do something with error                 }            }            // 判断正则            let regex = binding.value.regex            if (regex === 'IpRegex') {                if (!el.value.match(domainReg)) {                    //do something with error                 }            } else if (!el.value.match(regex)) {                //do something with error             }        })    }})// 注册一个全局自定义指令 `v-checkSubmit`Vue.directive('checkSubmit', {    // 当被绑定的元素插入到 DOM 中时……    inserted: function (el, binding, vNode) {        el.addEventListener('click', function (event) {            let elements = document.getElementsByClassName('v-check')            var evObj = document.createEvent('Event')            evObj.initEvent('keyup', true, true)            for (let element of elements) {                element.dispatchEvent(evObj)            }            let errorInputs = document.getElementsByClassName('errorClssDom');            if (errorInputs.length === 0) {                vNode.context.submit();            }        })    }})