需求:
1.模糊搜索(不区分大小写)、
2.可输入(对单个标签只能输入英文字符、数字、短横线、下划线和小数点且10个字符内)、
3.所有标签总长度不超过100字符。

解决方案:

1.给a-select绑定属性:filterOption="filterOption"

该API为:是否根据输入项进行筛选。当其为一个函数时,会接收 inputValue option 两个参数,当 option 符合筛选条件时,应返回 true,反之则返回 false。

实现代码:

filterOption(inputValue, option) {
//搜索不区分大小写
	return (
		option.componentOptions.children[0].text
		.toLowerCase()
		.indexOf(inputValue.toLowerCase()) >= 0
	)
}

2.使用表单校验规则

使用arr.every((item, index, arr) => { return true }) 对每个输入标签进行校验;

使用arr.reduce((pre,cur) => { return pre+cur.length }, 0) 对所有标签进行校验

片段代码如下:

rules: {
	assignLabels: [
		{
		required: true,
		message: '请选择服务器标签'trigger: 'change'
		},
		{
		validator: checkassignLabels
		}
	]
}
const checkassignLabels = (rule, val. callback) => {
	//对输入数组每一个标签字符进行校验
	function checkEvery(el, index, arr) {
		let labelReg = /^[a-z_A-Z-.0-9]{1,10}$/
		return label.test(el)
	}
	//对总字符长度进行校验
	let allLength = 0
	allLength = val.reduce((pre, cur) => {
		return pre + cur.length
	}, 0)
	//对输入数组每一个标签字符进行校验
	if(val.every(checkEvery)) {
	//对总字符长度进行校验
		if(allLength < 101){
			callback()
		}else{
			callback(new Error('总字符不能超过100'))	
		}
	}else{
		callback(
		new Error('只能输入英文字符、数字、短横线、下划线和小数点且10个字符内')
		)
	}
}

实现效果:
在这里插入图片描述
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐