我正在学习AngularJS,我正在制作信用卡验证器。 我已经在自定义过滤器中实现了Luhn算法,它完美地运行。但是,为了验证表格,我也希望到期日期有效,即满足以下条件: - 08/16 - 2015年2月 - 0518 - 日期不得过期(显然)
因为我发现Angular中已有日期过滤器,所以我尝试创建一个。对我而言似乎合乎逻辑,但它根本不起作用。这是代码:
/**
* validate-expiry-date Module
*
* Validates the date format and that the date is not in the past
*/
angular.module('validate-expiry-date', []).filter('validDate', [function () {
return function (date) {
var actualDate = new Date();
var m,y,d;
if (/^\d{2}\/\d{2}$/.test(date)) {
m = date.substring(0, 2);
y = 20 + date.slice(-2);
d = new Date(y,m);
return(actualDate > d);
}if (/^\d{2}\/\d{4}$/.test(date)) {
m = date.substring(0, 2);
y = date.slice(-4);
d = new Date(y,m);
return(actualDate > d);
}else if (/^\d{4}$/.test(date)) {
m = date.substring(0, 2);
y = 20 + date.slice(-2);
d = new Date(y,m);
return(actualDate > d);
};
}
}])
任何人都可以向我解释一下发生了什么? 谢谢, 乙
答案 0 :(得分:0)
您的过滤器功能在概念上 (尽管您对月份的解释是关闭的,但请在Date
构造函数上查找文档)。你的问题是符合角度所期望的。
不是像你在这里假设的那样接收单个日期字符串,而是实际得到需要过滤的完整数组。而不是返回true / false,您需要返回修改后的(已过滤)数组。
但是,您编写的函数与Array.prototype.filter
非常吻合,因此可以在this plunker中使用。我修复了。
以下是相关更改:
function filterSingleDate(date) {
var actualDate = new Date();
var m,y,d;
if (/^\d{2}\/\d{2}$/.test(date)) {
m = date.substring(0, 2) - 1;
y = 20 + date.slice(-2);
d = new Date(y,m);
} else if (/^\d{2}\/\d{4}$/.test(date)) {
m = date.substring(0, 2) - 1;
y = date.slice(-4);
d = new Date(y,m);
} else if (/^\d{4}$/.test(date)) {
m = date.substring(0, 2) - 1;
y = 20 + date.slice(-2);
d = new Date(y,m);
}
return actualDate > d;
}
var FilterModule = angular.module('FilterModule', []).filter('validDate', [function () {
return function (dateList) {
return dateList.filter(filterSingleDate);
};
}]);