首先看看判断字符串长度的几种方法(英文占1个字符,中文汉字占2个字符)
方法一:
function strlen(str) {
var len = 0;
for (var i = 0; i < str.length; i++) {
var c = str.charCodeAt(i);
//单字节加1
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
len++;
} else {
len += 2;
}
}
return len;
} // strlen('adcd') //4
// strlen('adcd哈') //6
方法二:
function GetLength(str) {
var realLength = 0,
len = str.length,
charCode = -1;
for (var i = 0; i < len; i++) {
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) realLength += 1;
else realLength += 2;
}
return realLength;
} // GetLength('1234a') //5
// GetLength('我是谁') //6
方法三:
function GetLength(str) {
var l = str.length;
var blen = 0;
for (i = 0; i < l; i++) {
if ((str.charCodeAt(i) & 0xff00) != 0) {
blen++;
}
blen++;
}
return blen;
} // GetLength('1234a') //5
// GetLength('我是谁') //6
上面三种方法都能返回字符串的长度,结合element的自带表单验证功能,就能做出好看又好用的验证啦。下面是使用element自定义验证实现提示输入要求的案列:
<el-form :model="form" label-width='130px' :rules="rules" ref="ruleForm">
<el-form-item label="项目名称:" prop="projectname">
<el-input v-model="form.projectname" placeholder="请输入项目名称"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="subOnline()">在线生成</el-button>
</el-form-item>
</el-form>
<script>
export default {
data() {
//这里就是整个checkName啦,就是方法一的使用
var checkName = (rule, value, callback) => {
var len = 0;
for (var i=0; i<value.length; i++) {
var c = value.charCodeAt(i);
//单字节加1
if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
len++;
} else {
len+=2;
}
};
if ((len < 4 && len> 0) || len > 30) {
//重点重点,下面就是填写提示的文字
callback(new Error('名称长度为4-30个字符,一个中文字等于2个字符。'));
} else {
callback();
}
}; return {
form: {
projectname: '',
},
rules: {
projectname: [
//validator是自定义校验固定写法,我们只需填他的值(checkName)就好了, callback 必须被调用。
{validator: checkName,trigger: 'blur' }
]
},
};
},
methods: {
//为了容易理解我就没写多余的方法,通过trigger: 'blur'使得输入框失去焦点就触发事件,也就看得到效果了
}
}
</script>
说了这么多,来看看效果吧:
******这是3个字符的,不合条件******
******这是4个字符的,符合条件******
******这是3个字符的,不符合条件******