我有一个字段需要以多种格式接受城市/州的输入值,包括City ST
(芝加哥 IL)、City, ST
(芝加哥,IL)和City,ST
(芝加哥,IL - 之间没有空格)。我们在逗号或空格的最后一个实例之后测试两个字母的状态代码(因为城市名称可以有空格。)
我有以下代码失败了应该通过的值,反之亦然。
var x = "Chicago,IL";
if (
(isNaN(x) && x.indexOf(' ') < 0 && x.split(" ").pop().length > 2) ||
(isNaN(x) && x.indexOf(',') > 0 && x.split(",").pop().trim().length > 2)
) {
alert("fail");
}
else {
alert("pass");
}
(这里小提琴)
所以我的代码应该做的是失败,如果1)值不是数字并且包含至少一个空格并且在最后一个空格之后有超过2个字符,或者2)值不是数字并且它包含逗号并且逗号后有超过 2 个字符(我正在删除逗号后的潜在空格。)
实际发生的是,它传递了这些值:
Chicago IL
Chicago, IL (with a space, even though it's trimming the space)
但是失败Chicago,IL
(最初输入时没有空格。)我认为 OR ( II
) 有问题的原因是,如果我删除第一部分并仅测试包含逗号的值,则Chicago,IL
通过。我认为 OR 条件仅在 OR 的两边都为 false 时才返回 false,但这里似乎并非如此。
我敢肯定这是一件非常简单的事情,但我已经盯着它看了太久,就是看不到它。