el-form 自定义验证 验证字母是否全部大写,这样写为什么不生效

const validateVin = (rule, value, callback) => {

const isABC = /\D/; //是否含有字母
const reg = /^[A-Z]+$/; //字母是否大写
if (!value) {
    callback(new Error('不能为空'));
} else if (value.length < 17) {
    callback(new Error('不够17位'));
} else {
if (!isABC.test(value)) {
    callback(new Error('是否含有英文'));
    if (!reg.test(value)){
        callback(new Error('英文必须大写'));
    }
}

}
};

是否包含字母就生效了,我的正则没写错啊

阅读 2.8k
1 个回答

你这写的,问题还不少
首先,你最后两个和英文判断有关的逻辑是怎么在写啊.前面 callback 后,你确定后面的一个判断,即使运行了,还能 callback 出去?
/\D/ 也不是你想,他是匹配所有除了数字之外的字符 比如 ~!@$%^&*()_+ 这都是能被/\D/匹配到的
/^[A-Z]+$/ 你这个判断是要求你验证的内容必须全部位大写字母啊..其实你前一步验证了一定包含英文,后面这个包含的英文必须为大写,这个并不好些,但是反过来,只要能匹配到小写英文就说明有问题不就好些多了么...

const validateVin = (rule, value, callback) => {
    const containAlpha = /[a-zA-Z]/; //含有字母
    const containLowerCase = /[a-z]/; //匹配小写字母
    if (!value) {
        callback(new Error('不能为空'));
    } else if (value.length < 17) {
        callback(new Error('不够17位'));
    } else if (!containAlpha.test(value)) {
        callback(new Error('必须包含有英文'));
    } else if (containLowerCase.test(value)){
        callback(new Error('英文必须大写'));
    }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题