在判断输入框不为空,且不满足两个正则表达式时,if括号里的条件要把两个正则表达式提取出来赋予另一个 变量,再放入if条件里面,不然会验证不正确。如:要验证一个税号输入框,如果输入框不为空且不满足企业信用代码或不满足身份证号,要这么写:
//18位身份证表达式
const idNumReg=/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
// 企业信用代码正则表达式:18位字符
const creditCodeReg = /^[1-9A-GY]{1}[1239]{1}[1-5]{1}[0-9]{5}[0-9A-Z]{10}$/;
let boo = idNumReg.test(receiptNo) || creditCodeReg.test(receiptNo);
if (receiptNo.length != 0 && !boo) {
alert("纳税人识别号格式不正确,应为身份证号或企业信用代码");
}
或者
if (receiptNo.length != 0 && !(idNumReg.test(receiptNo) || creditCodeReg.test(receiptNo))) {
alert("纳税人识别号格式不正确,应为身份证号或企业信用代码");
}
要按上面这两种写法才可以验证通过,诸如下面几种情况都验证不通过(不太明白是什么原理?):
第一种:
let boo = !idNumReg.test(receiptNo) || !creditCodeReg.test(receiptNo);
if (receiptNo.length != 0 && boo) {
alert("纳税人识别号格式不正确,应为身份证号或企业信用代码");
}
第二种:
if (receiptNo.length != 0 &&(!idNumReg.test(receiptNo) || !creditCodeReg.test(receiptNo))) {
alert("纳税人识别号格式不正确,应为身份证号或企业信用代码");
}