如何使用Javascript验证信用卡到期日期?

如何使用Javascript验证信用卡到期日期?,javascript,html,forms,validation,Javascript,Html,Forms,Validation,我是一个完全的Javascript初学者,我真的被我的作业困住了。我必须让用户输入信用卡详细信息,并用Javascript验证它们。这是我的问题 当您没有选择我希望它执行的任何操作时,付款类型返回false,但我在到期月份和到期年份使用了类似的代码,即使您没有进行选择,这两个代码也可以返回true,我希望它们返回false 有效期验证我真的不知道怎么做。它只接受今天日期之后的日期。我已经想出了一些理论上可行的办法,但事实并非如此。有什么简单的吗?记住我是初学者!我可以添加或更改,使其工作 信用卡

我是一个完全的Javascript初学者,我真的被我的作业困住了。我必须让用户输入信用卡详细信息,并用Javascript验证它们。这是我的问题

当您没有选择我希望它执行的任何操作时,付款类型返回false,但我在到期月份和到期年份使用了类似的代码,即使您没有进行选择,这两个代码也可以返回true,我希望它们返回false

有效期验证我真的不知道怎么做。它只接受今天日期之后的日期。我已经想出了一些理论上可行的办法,但事实并非如此。有什么简单的吗?记住我是初学者!我可以添加或更改,使其工作

信用卡号码验证的脚本也需要16个号码,但令人费解的是,它似乎不起作用

下面是我的Javascript和html

谢谢你的帮助

致以最良好的祝愿

格雷格

JAVASCRIPT

HTML


在下面的代码中,您有一些偏差

var firstName=document.getElementById("firstName");
var lastName=document.getElementById("lastName");
var email=document.getElementById("email");
var postcode=document.getElementById("postcode");
var paymentType=document.getElementById("paymentType");
//here why did you use .value. Probably removing .value would fix your issue
var exMonth=document.getElementById("exMonth").value;
var exYear=document.getElementById("exYear").value;
var cardNumber=document.getElementById("cardNumber").value;
将最后三行更改为如下内容

var exMonth=document.getElementById("exMonth");
var exYear=document.getElementById("exYear");
var cardNumber=document.getElementById("cardNumber");

对于信用卡到期验证,您可以这样做

var today, someday;
var exMonth=document.getElementById("exMonth");
var exYear=document.getElementById("exYear");
today = new Date();
someday = new Date();
someday.setFullYear(exYear, exMonth, 1);

if (someday < today) {
   alert("The expiry date is before today's date. Please select a valid expiry date");
   return false;
}

我也在做类似的事情。提供的答案不适用于我的信用卡到期验证,但这一个有效。我用过你的变量

if(exMonth.selectedIndex<month && exYear.selectedIndex<=year)
{
    alert("Please enter a valid expiration date");
    return false;
}
使用和

假设您希望从今天的日期开始动态设置10年的日期范围

包括jQuery.InputMask.js和moment.js库CDN或自托管

可选:CDN

HTML


我发现前面的答案有问题。我在这里发布我的测试解决方案

之前答案的问题他们今天不考虑。要解决这个问题,你必须使用一个月的最后一天。要在Javascript中找到它,可以使用 设置日期为零的完整年份、月份、日期

奖励:javascript中的月份为0-11

但是当你设定一个月时,你不应该使用月份-1

例: setFullYear2020,6,0/->2020年6月31日

const today = new Date();
const ed = new Date();
ed.setFullYear(year, month, 0);

if (ed < today) {
}

请记住,javascript应该在加密的站点上使用,例如https,而不是http,否则当人们嗅探您商店的数据线时,您会遇到大麻烦。很好,谢谢!:-哦,太好了!我甚至没有注意到“价值”是在这些东西的末尾。我把它去掉了,效果很好。万分感谢@请考虑把这个标记为答案,因为这解决了你的问题,帮助其他用户感谢所有的帮助,我想我已经走上正轨了:-谢谢你的回答,但这将无法正常工作,因为根据一个月参数中的in-setFullYear函数,如果用户将超过12月,那么将需要下一年和下一个月。正如@Ujjaval指出的,你需要执行exMonth-1来获得正确的月份。另外,你也不想假设今天是一个月的第一天,所以你应该有一天得到一个月的今天,就像这样。setFullYearexYear,exMonth-1,soday.getDate;现在已经晚了,但我想指出,信用卡在信用卡上所列的下个月的第一个月到期。这将解释答案中提供的值。也需要考虑到到期日期的午夜。这只适用于插入全年,如果只放入下半年,则需要有一个逻辑来确定它是指1900年还是2000年。请注意,当一个世纪发生变化时,这会变得棘手。这可能会导致错误。例如:-到期日期:12/01-当前日期:9<12以来的9/19!=如果为true,则未检查第二个条件,因此该卡被标记为有效。
if(exMonth.selectedIndex<month && exYear.selectedIndex<=year)
{
    alert("Please enter a valid expiration date");
    return false;
}
https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.3.4/bindings/inputmask.binding.js
https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js
<input type="text" id="expires_mmyy" name="cc_expires" maxlength="5" />
$('#expires_mmyy').inputmask({
   alias: 'datetime', 
   inputFormat: 'mm/yy'
   min: moment().add(1, 'M').format('MM/YY'),
   max: moment().add(10, 'Y').format('MM/YY')
})

const today = new Date();
const ed = new Date();
ed.setFullYear(year, month, 0);

if (ed < today) {
}