说明
这里记录下自己在Vue2的项目通过文本输入框的@input方法使用正则表达式来限制文本框的输入。这里将自己目前项目里面所用到的正则表达式全部写到一个js里面当做一个工具类使用。这里承接自己的博客Vue2搭建基础架构(10)— 菜单栏功能和Tab页功能联动实现这篇博客,在该博客项目的基础上增加该工具类的使用。
工具类
在src目录下的utils文件夹创建一个validateRule.js文件。
validateRule.js代码:
javascript">// 使用正则校检输入框输入值/*** 只允许输入数字* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateNumber(val, key, obj) {// 只允许输入数字obj[key] = val.replace(/[^\d]/g, '')
}/*** 只允许输入负整数和正整数* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateNegativeNumber(val, key, obj) {// 只允许输入负整数和正整数obj[key] = val.replace(/[^0-9-]|(?<=\..*)\.|(?<!\d)\.|(?!^)-/g, '')
}/*** 只允许输入大小写字母* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateAlphabet(val, key, obj) {// 只允许输入大小写字母obj[key] = val.replace(/[^a-zA-Z]/g, '')
}/*** 只允许输入中文* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateChinese(val, key, obj) {// 只允许输入中文obj[key] = val.replace(/[^\u4E00-\u9FA5]/g, '')
}/*** 只允许输入数字和字母* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateNumberAndAlphabet(val, key, obj) {// 只允许输入数字和字母obj[key] = val.replace(/[^\da-zA-Z]/g, '')
}/*** 只允许输入数字和字母和中文* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateNumberAndAlphabetAndChinese(val, key, obj) {// 只允许输入数字和字母和中文obj[key] = val.replace(/[^\da-zA-Z\u4E00-\u9FA5]/g, '')
}/*** 只允许输入小数,最多保留2位小数* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateKeepTwoFloat(val, key, obj) {// 只允许输入小数,最多保留2位小数obj[key] = val.replace(/[^\d.]/g, '') // 只允许输入正整数和小数点.replace(/^\./g, '0.') // 如果开头第一个输入为小数点,则替换为0.开头.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 这3个正则在一起才行,为只允许有一个小数点.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
}/*** 只允许输入小数,保留3位小数* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateKeepThreeFloat(val, key, obj) {// 只允许输入小数,保留3位小数obj[key] = val.replace(/[^\d.]/g, '') // 只允许输入正整数和小数点.replace(/^\./g, '0.') // 如果开头第一个输入为小数点,则替换为0.开头.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 这3个正则在一起才行,为只允许有一个小数点.replace(/(\.\d{3})\d*/, '$1') // 最多保留3位小数
}/*** 只允许输入小数,最大允许输入8位整数和2位小数* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateMaxDigitFloat(val, key, obj) {// 只允许输入小数,最大允许输入8位整数和2位小数obj[key] = val.replace(/[^\d.]/g, '') // 只允许输入正整数和小数点.replace(/^\./g, '0.') // 如果开头第一个输入为小数点,则替换为0.开头.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 这3个正则在一起才行,为只允许有一个小数点.replace(/(\d{8})\d*/, '$1') // 无小数点时,最多允许输入8位整数.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
}/*** 能输入正负位小数,最大允许输入8位整数和2位小数* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function validateNumberMaxDigitFloat(val, key, obj) {// 能输入正负位小数,最大允许输入11位整数和2位小数obj[key] = val.replace("-.","%$%").replace(/\\-\./g,"").replace("%$%","-").replace(".-","$#$").replace(/\.\\-/g,"").replace("$#$",".").replace(/[^-\d.]/g,"") // 只允许输入-和正整数和小数点.replace(/^\./g,"0.") // 如果开头第一个输入为小数点,则替换为0.开头.replace(/^(0[0-9])/,"") // 验证首位出现类似于01,02的金额.replace(/^-(0[0-9])/,"") // 验证首位出现类似于-01,-02的金额.replace(".","$#$").replace(/\./g,"").replace("$#$",".") // 只保留第一个. 清除多余的.replace("-","$%$").replace(/\\-/g,"").replace("$%$","-") // 只保留第一个- 清除多余的.replace(/\d{1,}-|\d{1,}\.\d{1,2}-/,"") // 不能在数字后面输入-.replace(/(\d{8})\d*/, '$1') // 无小数点时,最多允许输入8位整数.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
}/*** 文本框字符串全部转为大写* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function valToUpperCase(val, key, obj) {// 将字符串转大写let newVal = val.toUpperCase()if (val !== newVal) {obj[key] = newVal}
}/*** 只允许输入数字和字母且文本框字符串全部转为大写* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象*/
export function limitValToUpperCase(val, key, obj) {// 只允许输入数字和字母validateNumberAndAlphabet(val, key, obj)// 将字符串转大写let newVal = val.toUpperCase()if (val !== newVal) {obj[key] = newVal}
}/*** 只允许输入数字,针对数组* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象* @index 数组的索引* @field 数组中对象里面的某个属性名*/
export function validateNumberList(val, key , obj, index, field){// 只允许输入数字obj[key][index][field] = val.replace(/[^\d]/g, '')
}/*** 只允许输入字母,针对数组* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象* @index 数组的索引* @field 数组中对象里面的某个属性名*/
export function validateAlphabetList(val, key, obj, index, field) {// 只允许输入字母obj[key][index][field] = val.replace(/[^a-zA-Z]/g, '')
}/*** 只允许输入数字和字母,针对数组* @val 为input框的$event值* @key 为obj对象中的某个属性名* @obj 对象* @index 数组的索引* @field 数组中对象里面的某个属性名*/
export function validateNumberAndAlphabetList(val, key , obj, index, field){// 只允许输入数字和字母obj[key][index][field] = val.replace(/[^\da-zA-Z]/g, '')
}
在src/views/home首页里面的index.vue测试代码如下:
javascript"><template><div><el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="400px" class="demo-ruleForm"><el-form-item label="只允许输入数字" prop="test1"><el-inputv-model="ruleForm.test1"@input="validateNumber($event,'test1',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入负整数和正整数" prop="test2"><el-inputv-model="ruleForm.test2"@input="validateNegativeNumber($event,'test2',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入大小写字母" prop="test3"><el-inputv-model="ruleForm.test3"@input="validateAlphabet($event,'test3',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入中文" prop="test4"><el-inputv-model="ruleForm.test4"@input="validateChinese($event,'test4',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入数字和字母" prop="test5"><el-inputv-model="ruleForm.test5"@input="validateNumberAndAlphabet($event,'test5',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入数字和字母和中文" prop="test6"><el-inputv-model="ruleForm.test6"@input="validateNumberAndAlphabetAndChinese($event,'test6',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入小数,最多保留2位小数" prop="test7"><el-inputv-model="ruleForm.test7"@input="validateKeepTwoFloat($event,'test7',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入小数,保留3位小数" prop="test8"><el-inputv-model="ruleForm.test8"@input="validateKeepThreeFloat($event,'test8',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入小数,最大允许输入8位整数和2位小数" prop="test9"><el-inputv-model="ruleForm.test9"@input="validateMaxDigitFloat($event,'test9',ruleForm)"></el-input></el-form-item><el-form-item label="能输入正负位小数,最大允许输入8位整数和2位小数" prop="test10"><el-inputv-model="ruleForm.test10"@input="validateNumberMaxDigitFloat($event,'test10',ruleForm)"></el-input></el-form-item><el-form-item label="文本框字符串全部转为大写" prop="test11"><el-inputv-model="ruleForm.test11"@input="valToUpperCase($event,'test11',ruleForm)"></el-input></el-form-item><el-form-item label="只允许输入数字和字母且文本框字符串全部转为大写" prop="test12"><el-inputv-model="ruleForm.test12"@input="limitValToUpperCase($event,'test12',ruleForm)"></el-input></el-form-item><!--动态数组校检对象--><el-row v-for="(item,index) in ruleForm.testObj" :key="index"><el-col :span="6"><!--必须要加:rules="rules.test13",不然rules校检不生效--><el-form-item :label="`测试动态添加只允许输入数字${index + 1}`" label-width="220px" :prop="`testObj.${index}.test13`" :rules="rules.test13"><el-input style="width: 100%;" v-model="item.test13"@input="validateNumberList($event, 'testObj', ruleForm, index, 'test13')" /></el-form-item></el-col><el-col :span="6"><el-form-item :label="`测试动态添加只允许输入字母${index + 1}`" label-width="210px" :prop="`testObj.${index}.test14`"><el-input style="width: 100%;" v-model="item.test14"@input="validateAlphabetList($event, 'testObj', ruleForm, index, 'test14')" /></el-form-item></el-col><el-col :span="6"><el-form-item :label="`测试动态添加只允许输入数字和字母${index + 1}`" label-width="250px" :prop="`testObj.${index}.test15`"><el-input style="width: 100%;" v-model="item.test15"@input="validateNumberAndAlphabetList($event, 'testObj', ruleForm, index, 'test15')" /></el-form-item></el-col><el-col :span="6"><el-form-item label-width="10px"><i class="el-icon-circle-plus-outline" v-if="ruleForm.testObj.length && index === 0" @click="add"></i><i class="el-icon-remove-outline" v-else @click="remove(item)"></i></el-form-item></el-col></el-row></el-form></div>
</template><script>import {validateNumber,validateNegativeNumber,validateAlphabet,validateChinese,validateNumberAndAlphabet,validateNumberAndAlphabetAndChinese,validateKeepTwoFloat,validateKeepThreeFloat,validateMaxDigitFloat,validateNumberMaxDigitFloat,valToUpperCase,limitValToUpperCase,validateNumberList,validateAlphabetList,validateNumberAndAlphabetList} from '@/utils/validateRule'export default {name: "home-index",data() {return {ruleForm: {test1: '',test2: '',test3: '',test4: '',test5: '',test6: '',test7: '',test8: '',test9: '',test10: '',test11: '',test12: '',testObj: [{test13: '',test14: '',test15: ''}]},rules: {test1: [{ required: true, message: '请输入', trigger: 'blur' },{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }],test13: [{ required: true, message: '请输入', trigger: 'blur' },{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }]}}},methods:{validateNumber,validateNegativeNumber,validateAlphabet,validateChinese,validateNumberAndAlphabet,validateNumberAndAlphabetAndChinese,validateKeepTwoFloat,validateKeepThreeFloat,validateMaxDigitFloat,validateNumberMaxDigitFloat,valToUpperCase,limitValToUpperCase,validateNumberList,validateAlphabetList,validateNumberAndAlphabetList,// 添加一行add(){this.ruleForm.testObj.push({test13: '',test14: '',test15: ''})},// 移除一行remove(item){let index = this.ruleForm.testObj.indexOf(item)if (index !== -1) {this.ruleForm.testObj.splice(index, 1)}}}}
</script><style lang="less" scoped></style>
测试使用正则表达式限制文本框输入
默认进入首页测试,浏览器结果如下:
到这里使用正则表达式限制文本框输入就到这里了。如果以后在工作中有扩增的话再加上即可。