JavaScript中的数字验证

JavaScript中的数字验证,javascript,html,validation,Javascript,Html,Validation,我已经创建了一个外部JavaScript来验证我在HTML中创建的表单。一些验证是有效的,但当我使用相同的代码验证其他字段时,它将不起作用。例如,邮政编码必须包含数字-否则,邮政编码无效 我尝试使用相同的信用卡代码,即信用卡必须有16位数字,否则,信用卡号无效。我写了邮政编码,它工作了,但当我试图重新安排它,以适应信用卡的功能,它没有工作。不太清楚为什么?我应该使用不同的函数吗 以下是我的外部javascript: function validateForm() { if (is

我已经创建了一个外部JavaScript来验证我在HTML中创建的表单。一些验证是有效的,但当我使用相同的代码验证其他字段时,它将不起作用。例如,邮政编码必须包含数字-否则,邮政编码无效

我尝试使用相同的信用卡代码,即信用卡必须有16位数字,否则,信用卡号无效。我写了邮政编码,它工作了,但当我试图重新安排它,以适应信用卡的功能,它没有工作。不太清楚为什么?我应该使用不同的函数吗

以下是我的外部javascript:

function validateForm()
{   
     if (isNaN(document.getElementById("postcode").value))
     {
         alert ("Your postcode is not valid");
     }
     else 
     {
         alert ("You have entered your postcode correctly");
     }

    if (document.getElementById ("email").value.length < 5 ||     
        document.getElementById ("email").value.indexOf("@")== -1) 
    {
        alert("Please enter your email min 5 chars and include @ symbol");
        document.getElementById("email").focus();
        return false;
    }

    if (isNaN(document.getElementById("creditcard").value))
    {
        alert ("Your creditcard is not valid");
    }
    else 
    {
    alert ("You have entered your creditcard correctly");
    }

    alert("Thank you for your submission!");
    return true;
}
函数validateForm()
{   
if(isNaN(document.getElementById(“postcode”).value))
{
警告(“您的邮政编码无效”);
}
其他的
{
警告(“您已正确输入邮政编码”);
}
if(document.getElementById(“email”).value.length<5 |
document.getElementById(“email”).value.indexOf(“@”)=-1)
{
提醒(“请输入您的电子邮件至少5个字符并包含@symbol”);
document.getElementById(“email”).focus();
返回false;
}
if(isNaN(document.getElementById(“信用卡”).value))
{
提醒(“您的信用卡无效”);
}
其他的
{
提醒(“您已正确输入您的信用卡”);
}
提醒(“感谢您的提交!”);
返回true;
}

isNaN检查值是否不是整数,您需要额外检查长度

保持代码与设置函数其余部分的方式类似,要检查信用卡是否为数字且长度为16,您需要:

if( !(isNaN(document.getElementById("creditcard").value) && document.getElementById("creditcard").value.length === 16) {
    alert("Credit Card Is Valid");
}else{
    alert("Your Credit Card is Not Valid");
    return false;
}

因此,首先,您可能不希望一次向用户提示10个错误对话框。 因此,应该嵌套
if-else
子句&函数将在第一个错误后停止。 其次,
isNaN
无疑是一个很好的求值器,因为
input.value
可能返回字符串类型的值。使用正则表达式是一种更健壮的错误检查输入的方法。第三,您要解释用户的混淆错误。用户经常想(我也是):“等等,我应该在信用卡上写破折号吗?”

因此,在继续之前,您将删除点、破折号和空白(这些可能会不知不觉地被包括在内)。其他字符是无效的。对于您的信用卡输入,这将是:

var ccVal = document.getElementById("creditcard").value;

// remove dots, dashes & whitespace
ccVal = ccVal.replace(/(\s|\.|\-)/g, ''); 

// if any other chars there, input value = incorrect & stop function
if ( ccVal.match(/\D/) ) { 
  alert('A credit card number only has decimals, silly.');
  return false;
} else {
  // Check for length now
  if ( ccVal.length !== 16) {
    alert('A credit card has 16 decimals, silly.');
    return false;
  } else {
    // more checks
    document.getElementById('myform').submit()
  }
}

请参见此处的实施示例:

并非所有信用卡都有16位数字。。。在基于无效假设制定自己的验证规则时要非常谨慎……什么不起作用?表格还提交了吗?如果是这样的话,那是因为你没有添加假报税表。是的,我知道,但我只是选择了16,只是为了测试我的表格。表单提交后会说,如果我在邮政编码字段中输入了无效数据,将弹出一条警告消息,但如果我对信用卡字段执行相同操作,则不会弹出任何消息。没有应有的警报消息。您需要检查以下内容-1。您必须具有id为的元素-邮政编码2。向函数中添加调试器,以检查/确定其失败的位置3。使用浏览器开发人员控制台并检查是否有任何错误(如果您使用的是chrome,请使用F12,当输入错误时请使用return false,正如@Adneo所建议的。我尝试了它,但仍然是一样的。只有邮政编码会弹出一条警告消息,不是信用卡。仍然不起作用。可能是我输入错误。如果我给您发送文件,您能在您这边测试它吗?@user3699543,没有没有必要。我在文章中添加了一个示例,您可以看到它的工作原理。我必须稍微调整一下代码,(匹配而不是indexOf,不知道为什么它不工作)。此外,只有当您的提交按钮有一个
type=“button”
并且您仅通过JS使用
.submit()提交表单时,这才有效
return
语句不会阻止提交。