isNaN 没有捕捉到字母
isNaN not catching letters
我有 JS 代码来验证邮政编码:10 个数字字符,第 6 个位置有破折号(例如,12345-6789)。我使用 !isNaN
.
验证这两个部分都是数字
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(substring(6,9)) 在这种情况下允许通过?
newVal.substring(6,9)
在字符串“12345-678a”的情况下会 return “678”,这是一个数字。所以应该不会抛出错误。
String.substring
函数签名为:
str.substring(indexA[, indexB])
indexA
An integer between 0 and the length of the string, specifying the
offset into the string of the first character to include in the
returned substring.
indexB
Optional. An integer between 0 and the length of the string, which
specifies the offset into the string of the first character NOT to
include in the returned substring.
所以你有:
"12345-678a".substring(0,4) // 1234
"12345-678a".substring(6,9) // 678
所以要么更正索引:
"12345-678a".substring(0,5) // 12345
"12345-678a".substring(6) // 678a
或使用String.substr
.
或使用正则表达式(推荐),因为您当前的代码在修复后很乐意接受 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
我有 JS 代码来验证邮政编码:10 个数字字符,第 6 个位置有破折号(例如,12345-6789)。我使用 !isNaN
.
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(substring(6,9)) 在这种情况下允许通过?
newVal.substring(6,9)
在字符串“12345-678a”的情况下会 return “678”,这是一个数字。所以应该不会抛出错误。
String.substring
函数签名为:
str.substring(indexA[, indexB])
indexA
An integer between 0 and the length of the string, specifying the offset into the string of the first character to include in the returned substring.
indexB
Optional. An integer between 0 and the length of the string, which specifies the offset into the string of the first character NOT to include in the returned substring.
所以你有:
"12345-678a".substring(0,4) // 1234
"12345-678a".substring(6,9) // 678
所以要么更正索引:
"12345-678a".substring(0,5) // 12345
"12345-678a".substring(6) // 678a
或使用String.substr
.
或使用正则表达式(推荐),因为您当前的代码在修复后很乐意接受 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