【发布时间】:2013-09-09 19:31:08
【问题描述】:
我有一个字段需要以多种格式接受城市/州的输入值,包括 City ST(伊利诺伊州芝加哥)、City, ST(伊利诺伊州芝加哥)和City,ST(伊利诺伊州芝加哥 - 没有空格之间)。我们正在测试逗号或空格的最后一个实例之后的两个字母的状态代码(因为城市名称可以有空格。)
我有以下代码失败了应该通过的值,反之亦然。
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");
}
(小提琴here)
所以我的代码应该做的是失败,如果 1) 值不是数字并且包含至少一个空格并且在最后一个空格之后有超过 2 个字符,或者 2) 值不是数字并且它包含逗号并且逗号后有超过 2 个字符(我正在删除逗号后的潜在空格。)
实际发生的是,它传递了这些值:
Chicago IL
Chicago, IL (with a space, even though it's trimming the space)
但是 Chicago,IL 失败(最初输入时没有空格。)我认为 OR (II) 有问题的原因是,如果我删除第一部分并仅测试包含逗号的值,@ 987654329@ 通过。我认为 OR 条件仅在 OR 两边都为 false 时才返回 false,但这里似乎并非如此。
我敢肯定这是一件非常简单的事情,但我已经盯着它看了太久,根本看不到它。
【问题讨论】:
-
我认为正则表达式在这里是合适的。
-
你为什么要在这里执行这个 isNaN 测试?假设您从文本字段中获取值,它应该始终是一个字符串
-
@jackweirdy 但是 isNaN("1") 仍然产生错误。也许她只是想丢弃数字字符串?
-
x.indexOf(' ') < 0 && x.split(" ").pop().length > 2没有意义。如果字符串中有空格,则x.indexOf(' ') < 0为false,第二个表达式将不会被执行。如果没有空格,x.split(" ")将返回一个包含一个元素的数组,x本身。你的意思是x.indexOf(' ') > 0吗? -
@LexLythius - 是的,我们正在处理不同块中的数字字符串,因为用户可以输入邮政编码或城市/州。只有当它是一个城市/州时,我们才想运行这组测试。
标签: javascript conditional-statements