[element-ui]对el-input输入值的一些处理
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
免费下载资源
·
背景:
在input输入的时候,经常有一些特殊的限制,下面对我遇到的一些需求做个汇总。
1.关于数字的校验相关(keyup和blur事件)
页面样式如下:
要求:
1、在输入的时候自动去除与数字无关的字符,只保留数字,再转成整数型
2、在失去焦点的时候限制数值范围
html代码如下:
<el-input v-model.trim="budgetAll"
@keyup.native="handleNumberType"
@blur="handleNumberRange"
placeholder="不限"></el-input>
js代码如下:
handleNumberType(e) {
if(e.target.value) { //如果有值(此时值类型为字符串)
e.target.value = e.target.value.replace(/[^\.\d]/g,'') //替换掉与数字无关的字符(中英文与符号都会被替换掉,只留下数字,此时值类型为字符串)
if(e.target.value) { //如果替换后还有值
e.target.value = parseInt(e.target.value); //把字符型转成整数型
}
}
//只能输入数字和小数点,限制第一位不能是小数点,小数点只能输入两位
//e.target.value = e.target.value.replace(/[^0-9.]/g, '').replace(/^\./g, "").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")
},
handleNumberRange(e) {
if(e.target.value && (e.target.value < 10 || e.target.value > 9999999)) {
this.$message.error('请输入10~9999999的正整数')
return
}
},
注:replace(new RegExp(',','gm'),'') 可以替换掉所有“,”
小数取整的方法还有:
1.Math.ceil()方法:向上取整,不管小数部分是多少,整数部分值都+1
Math.ceil(3/2) 输出:2
2.Math.floor()方法:向下取整,不管小数部分是多少,整数部分值都不变,只取整数部分 Math.floor(3/2) 输出:1
3.Math.round()方法:四舍五入取整
Math.round(3/2) 输出:2
4.parseInt()方法:抛去小数部分,不管小数部分是多少,只取整数部分
parseInt(3/2) 输出:1
2、关于邮箱的校验相关(blur事件和表单自定义检验)
页面样式如下:
要求:
1、在失去焦点的时候将其他符号换成英文分号
html代码如下:
<el-input v-model.trim="createform.sendEmail"
style="width:375px" placeholder="请输入邮箱地址,多个请用英文分号分割"
@focus="emailVisible = false"
@blur="emailBlur"></el-input>
js代码如下:
emailBlur(val) {
// console.log(val.target.value);
if(this.createform.sendEmail) {
this.createform.sendEmail = this.createform.sendEmail.replace(/[\r\n\s]/g, '').replace(/[;,]/g, ';');
}
},
2、利用el-form的表单校验方法
rules: {
sendEmail: [
{ required: true, message: '请输入邮箱地址', trigger: ['blur', 'change']},
{ required: true, validator: this.validatorEmail, trigger: 'blur' },
],
},
//校验邮箱格式
validatorEmail(rule, value, callback) {
let myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
let array = value.split(";")
if(array&&array.length) {
array.map(item => {
if(!myreg.test(item)) {
callback(new Error('请填写正确邮箱地址'));
}
})
}
callback()
},
3、普通查询型写法(失去焦点和回车事件)
<el-input v-model="params.materialName"
@keyup.enter.native="$event.target.blur()"
@blur="loadData"
@clear="loadData"
clearable
prefix-icon="el-icon-search"
placeholder="宝贝名称/宝贝ID"
style="width:250px"></el-input>
4、汇总一些校验要求
- replace(/[^\.\d]/g,'') //替换掉与数字无关的字符
-
replace(/[^0-9.]/g, '') //只能输入数字和小数点
-
replace(/^\./g, "") //限制第一位不能是小数点
-
replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3") //小数点只能输入两位
-
//只能输入两位小数的完整写法 e.target.value = e.target.value.replace(/^\./g,""); //清除第一位是“.”的字符 e.target.value = e.target.value.replace(/[^\d.]/g,""); //清除“数字”和“.”以外的字符 e.target.value = e.target.value.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的 e.target.value = e.target.value.replace(".","$#$").replace(/\./g,"").replace("$#$","."); if(e.target.value.indexOf(".")< 0 && e.target.value !=""){ //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额 e.target.value= parseFloat(e.target.value) }
GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45
7 个月前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 7 个月前
更多推荐
已为社区贡献8条内容
所有评论(0)