卡号验证不一致错误

时间:2017-03-07 15:12:33

标签: javascript html validation

我正在制作一个页面,其中包含一组卡片详细信息作为表单。需要使用 JavaScript 手动验证字段(不使用HTML 5)。我遇到的一个问题是 16位卡号字段。

  • 123456789012345r 返回无错误消息(位于下方的if语句中)
  • 1234567rt0123456 返回无错误消息
  • 1234rt7890123456 返回无错误消息
  • 1234dv7890123456 返回无错误消息
  • rt34567890123456 返回错误消息

我无法弄清楚为什么我会让这个不一致的失败者得到验证。我的代码有什么问题? 感谢。

HTML

<form onsubmit="submitDetails()">
        <input type="text" id="name" placeholder="Name" style="left:200px;position: absolute;"><br />
        <input type="text" id="cardNo" placeholder="Card Number" style="left:200px;position: absolute;"><br />
        <input type="text" id="expMonth" placeholder="MM" style="left:200px;position: absolute;">
        <input type="text" id="expYear" placeholder="YYYY" style="left:350px;position: absolute;"><br />
        <input type="text" id="secCode" placeholder="Security Code" style="left:200px;position: absolute;"><br />
        <input type="submit" id="submit" value="Submit Details" style="left:200px;position: absolute;">
    </form>

的JavaScript

 var cardNo = document.getElementById('cardNo').value;

 if ((cardNo.toString().length != 16) || (isNaN(parseInt(cardNo)))){
            errorMsg += "\n\u2022 Enter a Card Number of 16 digits.\n"
 }

2 个答案:

答案 0 :(得分:1)

parseInt()函数从你给它的字符串的前面解析一个整数。当遇到某些不属于数字的东西时,它会停止并返回到目前为止所看到的值。只有当字符串以不能解释为数字的字符串开头时,它才会返回NaN

答案 1 :(得分:0)

来自MDN

  

如果第一个字符无法转换为数字,则parseInt返回NaN。