Javascript / angularjs中信用卡到期日验证的正则表达式?

时间:2018-05-04 10:14:12

标签: javascript angularjs

我有一个文本字段,当我在该文本字段中输入信用卡到期日期(mm / yy)时,我使用Javascript验证日期。我尝试了以下正则表达式:

var s = "11/12";                                                        
/^(0[1-9]|1[0-2])\/\d{2}$/.test(s);

在上面的表达式中,月份验证有效但年份需要00,12,17。我如何验证年份?

1 个答案:

答案 0 :(得分:0)

如果您要求正确性,如果使用JavaScript的Date API,则可以进行更正确的日期验证。例如:

function validateExpiry (input) {
  // ensure basic format is correct
  if (input.match(/^(0\d|1[0-2])\/\d{2}$/)) {
    const {0: month, 1: year} = input.split("/");

    // get midnight of first day of the next month
    const expiry = new Date("20"+year, month);
    const current = new Date();
    
    return expiry.getTime() > current.getTime();
    
  } else return false;
}

console.log("01/23", validateExpiry("01/23"));
console.log("01/18", validateExpiry("04/18"));
console.log("05/18", validateExpiry("05/18"));
console.log("05.18", validateExpiry("05.18"));
console.log("invalid", validateExpiry("invalid"));