我通常不使用JavaScript,也看不出为什么这不起作用。感谢。
function testYear() {
var dObject = new Date();
var dRegEx = /^[0-9][0-9]00$/;
var d = dObject.getFullYear();
if (d.match(dRegEx) && d % 400 == 0) {
alert("The year "+d+" is in fact a leap year!");
//return true;
}
else if(!(d.match(dRegEx) && d % 400) && d % 4 == 0) {
alert("The year "+d+" is in fact a leap year!");
//return true;
}
else {
alert("The year "+d+" is not a leap year.");
//return false;
}
}
答案 0 :(得分:3)
如果你想要与正则表达式匹配全年,它应该是一个字符串:
var d = ''+dObject.getFullYear();
例如。
答案 1 :(得分:3)
此处无需使用正则表达式。只需使用普通的整数运算来查看年份是否可被100整除:
if (d % 100 === 0 && ...)
顺便说一下,如果d % 400 === 0
那么d % 100 === 0
自动为真,那么额外的测试是不必要的。
一年是公历中的leap year,如果它可以被400整除,或者它可以被4整除,但不能被100整除。请尝试这样:
if ((d % 400 === 0) || (d % 4 === 0 && d % 100 !== 0))
{
// is leap year
}
答案 2 :(得分:1)
d
是一个数字。您需要它是一个字符串才能使用match
方法。将其强制转换为字符串的最简单方法是向其添加空字符串:
var d = dObject.getFullYear() + '';
顺便说一句,你应该查看如何查看你的JavaScript控制台,因为那里会记录相关的错误。这将极大地帮助您追踪问题,或至少查明问题所在。
答案 3 :(得分:1)
忘记正则表达式,这只是错误的方法。当你的整个功能可以被(几乎)一个单行代替时,我无法弄清楚究竟出了什么问题,但是d
是一个数字,所以你不能在它上面使用match()
。您不需要测试它是否可被100 整除,可被400整除 - 后者意味着前者。
function testYear() {
var year = (new Date()).getFullYear();
if (year % 400 === 0 || (year % 4 === 0 && year % 100 != 0)) {
alert("The year " + year + " is in fact a leap year!");
//return true;
} else {
alert("The year "+year+" is not a leap year.");
//return false;
}
// OR, if you don't need the alerts and only care about the
// return value you can just do this:
return year % 400 === 0 || (year % 4 === 0 && year % 100 != 0);
}