问题根源在于我太大意了,不过我写的端口校验确实有问题,不严谨。最后却使用了数字范围校验,很简单。感谢各位评论提供的好点子,在此谢谢各位啦
在在线测试工具上验证表达式是对的,在项目中就是错的,例如测试端口号
let checkPort = (rule, value, callback) => {
if (value.length < = 0) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (value == '' || typeof(value) == undefined) {
callback(new Error('请输入端口值'));
} else {
const re = /^[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5]$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入在[0-65535]之间的端口值'));
} else {
callback();
}
}
}, 1000);
(根据下面提出意见的大神,将!value改成value.length,会出现一直校验的loading状态)会显示成以下,感觉十分有毒
另还有一处
let checkPackage = (rule, value, callback) => {
if (!value) {
return callback(new Error('协议包名不能为空'));
}
const reg = /^([a-z]+\.?)+[a-z0-9]+$/;
setTimeout(() => {
if (!reg.test(value)) {
callback(new Error('请输入正确的协议包名称,如 a.aa2'));
} else {
callback();
}
}, 1000);
};
已经直接忽略我的value值了。。。
有没有大神指点迷津
本来端口号就是整数值,就转换成整数值来判断最简单,用正则式其实不方便的。
而且你其实检测要求输入的端口号并不是0-65535 范围内的。
第二个还是用value.length 来判断更好,你想如果输入一个空格呢?