【发布时间】:2011-10-20 11:37:53
【问题描述】:
我正在尝试编写一个检查日期是否有效的方法。它按顺序以三个字符串传递:月、日和年。月份应为 0-11 而不是 1-12。我已经在 Java 中测试了代码的逻辑并且它可以工作。 is_int 是另一种测试字符串是否仅由数字字符组成的方法。不幸的是,我遇到了我无法解决的问题。
function is_int(value) {
for (i = 0 ; i < value.length ; i++) {
if ((value.charAt(i) < '0') || (value.charAt(i) > '9')) return false
}
return true;
}
function isValidDate(value1:String, value2:String, value3:String)
{
if (!is_int(value3)) return false;
if (!is_int(value2)) return false;
if (!is_int(value1)) return false;
var v1 = parseInt(value1) + 1;
var v2 = parseInt(value2);
var v3 = parseInt(value3);
if (v1 > 12 || v1 < 1) return false;
if (v2 > 31 || v2 < 1) return false;
if (v2 == 31) if (v1 == 2 || v1 == 4 || v1 == 6 || v1 == 9 || v1 == 11) return false;
if (v1 != 2) return true;
if (v2 < 29) return true;
if (v2 == 30) return false;
if (v3 % 400 == 0)
return true;
else if (v3 % 100 == 0)
return false;
else if (v3 % 4 == 0)
return true;
else
return false;
}
我的第一个测试器要求输入三个文本,如果 isValidDate 函数返回 false,则显示警报。如果没有,它会转发到一个空白的 html 页面。但是,我尝试了这个:
function validate() {
if (!isValidDate("a", "a", "a")) {
alert("wrong");
return false;
}
}
并且警报从未显示,并且每次都转发。奇怪的是,当我删除isValidDate前面的感叹号时,这仍然发生。我也尝试将双引号换成单引号,但这也没有解决问题。我的 is_int 测试仪也发生了同样的事情。我不知道我哪里出错了。
【问题讨论】:
-
您可以使用内置函数
isNaN来检查字符串是否为有效数字。见stackoverflow.com/questions/175739/… -
isNaN 与我的函数有点不同。例如,isNaN("") 返回 false,因为根据该函数,"" 等于 0。我不希望 "" 成为一个数字,所以我用我的代替。
-
parseInt(some_string, 10) == some_string怎么样?
标签: javascript html function testing validation