前端开发最常碰到的就是输入框,经常要做各种验证,本公司惯用的需求是直接屏蔽特定字符的输入,如禁止非数字输入,特殊符号输入,空格输入等,这些功能反复使用,做成指令的形式,直接调用,非常方便,上代码:

目录结构很简单:

  1、项目文件夹里新建directives文件夹,所有指令都放在这个文件夹里

  2、input-filter文件夹放具体指令,在其下建两个文件:

    a、inputFilter.js实现主体功能

    b、index.js负责封装,职责分明

inputFilter.js代码:

/**
* 实现功能
* 1、默认情况下只禁止空格输入
* 2、限制只能输入整数
* 3、限制只能输入整数和小数(价格类)
* 4、限制只能输入手机号
* 5、限制最大值和最小值(抛出错误给回调函数)
*/
const addListener = function(el, type, fn) {
el.addEventListener(type, fn, false)
}
const spaceFilter = function(el) {
addListener(el, 'keyup', () => {
el.value = el.value.replace(/\s+/, '')
})
}
const intFilter = function(el) {
addListener(el, 'keyup', () => {
el.value = el.value.replace(/\D/g, '')
})
}
const priceFilter = function(el) {
addListener(el, 'keyup', () => {
el.value = el.value.replace(/[^\d.]*/g, '')
if (isNaN(el.value)) {
el.value = ''
}
})
}
const specialFilter = function(el) {
addListener(el, 'keyup', () => {
el.value = el.value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g, '')
})
}
const phoneFilter = function(el) {
addListener(el, 'blur', () => {
if (!el.value) {
return
}
const phoneReg = new RegExp('^(13|14|15|16|17|18|19)[0-9]{9}$')
if (!phoneReg.test(el.value)) {
alert('手机号输入错误')
el.value = ''
}
})
}
const urlFilter = function(el) {
addListener(el, 'blur', () => {
if (!el.value) {
return
}
const urlReg = /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/
if (!urlReg.test(el.value)) {
alert('url输入错误')
el.value = ''
}
})
}
export default {
bind(el, binding) {
if (el.tagName.toLowerCase() !== 'input') {
el = el.getElementsByTagName('input')[0]
}
spaceFilter(el)
switch (binding.arg) {
case 'int':
intFilter(el)
break
case 'price':
priceFilter(el)
break
case 'special':
specialFilter(el)
break
case 'phone':
phoneFilter(el)
break
case 'url':
urlFilter(el)
break
default:
break
}
}
}

  

index.js代码:

import inputFilter from './inputFilter'

const install = function(Vue) {
Vue.directive('inputFilter', inputFilter)
} if (window.Vue) {
window.inputFilter = inputFilter
Vue.use(install)
} inputFilter.install = install
export default inputFilter

  

组件引用:

import inputFilter from '@/directives/input-filter/index.js'  // 引入

<el-input v-input-filter v-model="inputSpaceFilter" placeholder="空格无法输入"></el-input>
<el-input v-input-filter:int v-model="inputIntFilter" placeholder="只能输入整数"></el-input>
<el-input v-input-filter:price v-model="inputPriceFilter" placeholder="只能输入价格"></el-input>
<el-input v-input-filter:special v-model="inputSpecialFilter" placeholder="过滤特殊字符"></el-input>
<el-input v-input-filter:phone v-model="inputPhoneFilter" placeholder="只能输入手机号"></el-input>
<el-input v-input-filter:url v-model="inputUrlFilter" placeholder="只能输入网址"></el-input> export default {
directives: {
inputFilter
}
}

  

  

效果图:

vue指令应用--实现输入框常见过滤功能的更多相关文章

  1. vue货币格式化组件、局部过滤功能以及全局过滤功能

    一.在这里介绍一个vue的时间格式化插件: moment 使用方法: .npm install moment --save. 2 定义时间格式化全局过滤器 在main.js中 导入组件 import ...

  2. Vue | 指令实现自动翻译填充英文名功能

    背景:应用系统中存在多个创建实体表单,表单填写时,在填写中文名称后,要填写对应的英文名作为标识或数据库查询索引. 需求:填写中文名的同时,系统自动生成英文名并填充到表单中,辅助用户操作,节约操作时间. ...

  3. vue.js代码开发最常见的功能集合

    1:点击新增按钮跳出新页面 <span class="inquire" @click="addNew">新增</span> 在方法中,添 ...

  4. vue指令v-html中使用过滤器filters功能

    Vue 2.0 不再支持在 v-html 中使用过滤器 解决方法: 1:全局方法(推荐) 2:computed 属性 3:$options.filters(推荐) 1:使用全局方法: 可以在 Vue ...

  5. 【vuejs深入一】深入学习vue指令,自定义指令解决开发痛点

    写在前面  一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. 最近博主我沉淀了几个月,或者说懒了几个月.然而大佬的指点总是一针见血,能够让人看到方向.所以我现在有觉得,一个好的 ...

  6. 深入学习vue指令,自定义指令解决开发痛点

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code v-model指令 vue.js的定义是一个mvvm框架,将它发挥到极致能够极大的提升 ...

  7. 转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter.还有一种是 ...

  8. 第三篇:Vue指令

    Vue指令 1.文本指令相关 v-*是Vue指令,会被vue解析,v-text="num"中的num是变量(指令是有限的,不可以自定义) v-text是原样输出渲染内容,渲染控制的 ...

  9. Vue指令及自定义指令的使用

    导航列表: 一.vue指令 二.自定义指令 一.vue指令 回到顶部    1. v-text v-text主要用来更新textContent,可以等同于JS的text属性,不会解析标签,会把标签解析 ...

随机推荐

  1. js---07 js预解析,作用域---闭包

    js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...

  2. 26.使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面

    转自:https://blog.csdn.net/yuxxz/article/details/51318908 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及 ...

  3. IOS应用在ios7(iPhone5/iPhone5s)上不能全屏显示

    前言 [IOS应用在iOS7系统或者iPhone5/iPhone5s上不能全屏显示,应用画面上下各有1条黑色,但是在其他系统或者型号的手机上却是正常显示 Paste_Image.png Paste_I ...

  4. ELK+KAFKA安装部署指南

    一.ELK 背景 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如: ...

  5. (九)unity4.6学习Ugui中文文档-------參考-UGUI Rect Transform

     大家好.我是孙广东.   转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unit ...

  6. ubuntu终端sudo java提示“command not found”解决办法

    我在ubuntu 12.04里想启动一个java程序,sudo java -jar xxx.jar,但是结果提示sudo:java:command not found. Ubuntu下用sudo运行j ...

  7. 华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root

    华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery  及 root 下载地址    http://pan.baidu.com/s/1hsn6VzA 1. 在官网申请解锁码    申 ...

  8. theme- 自定义控件属性

    今天想要在一个控件中增加自己的一条属性,具体步骤如下 1.在frameworks/base/core/res/res/values/attr中注册属性 因为我们希望增加的属性是在AutoComplet ...

  9. 43.c++指针类型转换

    数据类型转换(static_cast) //数据类型转换 printf("%d\n", static_cast<int>(10.2)); 指针类型转换(reinterp ...

  10. [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948

    这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...