Javascript 伊斯南没有收到信吗
我有JS代码来验证邮政编码:10个数字字符,在第6位有一个破折号(例如12345-6789)。我使用Javascript 伊斯南没有收到信吗,javascript,string,numbers,nan,Javascript,String,Numbers,Nan,我有JS代码来验证邮政编码:10个数字字符,在第6位有一个破折号(例如12345-6789)。我使用验证这两个部分都是数字!伊斯南 if (valSize == 10) { var numVal1 = new Number(newVal.substring(0, 4)); var numVal2 = new Number(newVal.substring(6, 9)); if (newVal.charAt(5) == '-' && !isNaN(numVa
验证这两个部分都是数字!伊斯南
if (valSize == 10) {
var numVal1 = new Number(newVal.substring(0, 4));
var numVal2 = new Number(newVal.substring(6, 9));
if (newVal.charAt(5) == '-' && !isNaN(numVal1) && !isNaN(numVal2)) {
return newVal;
}
}
throw "Incorrect format";
这主要起作用,但由于某种原因,以下值会通过,并且不会返回错误:
12345-678a
为什么呢!在这种情况下允许IsNaN(子字符串(6,9))通过?newVal。在字符串“12345-678a”的情况下,子字符串(6,9)
将返回一个数字“678”。因此应该不会抛出错误。函数签名是:
str.substring(indexA[, indexB])
indexA
介于0和字符串长度之间的整数,指定
偏移到要包含在字符串中的第一个字符的字符串中
返回子字符串
indexB
可选。介于0和字符串长度之间的整数
指定第一个字符到字符串的偏移量,而不是到
包含在返回的子字符串中
所以你有:
"12345-678a".substring(0,4) // 1234
"12345-678a".substring(6,9) // 678
因此,要么修正指数:
"12345-678a".substring(0,5) // 12345
"12345-678a".substring(6) // 678a
或使用
或者使用正则表达式(推荐),因为在修复后,您当前的代码将乐于接受
12.45-67.8
、+1234--678
和12e45-6e-9
。您需要做的就是:
/^\d{5}-\d{4}$/.test("12345-678a") // false
/^\d{5}-\d{4}$/.test("12.45-67.8") // false
/^\d{5}-\d{4}$/.test("12345-6789") // true
正则表达式不是更合适的测试吗
/\d{5}-\d{4}/.test('12345-1234')
true
/\d{5}-\d{4}/.test('12345-123a')
false
值得注意的是,
“12345-678a”。substr(6,9)//678a
旁注:有些人说异常应该用于异常的事情,而输入验证并不完全是异常的。