gpt4 book ai didi

javascript - parseInt() 返回不正确的值; DOB验证

转载 作者:行者123 更新时间:2023-11-30 06:58:49 24 4
gpt4 key购买 nike

想知道是否有人可以在我把头发拉到这个问题上时透露一些信息!

我编写了一个简单的函数来验证用户的出生日期,这一切都很好,或者至少在我意识到它没有按预期工作之前是这样!

如下所示,该函数采用 2 个参数,dobNum(输入字段的值)和 dmy(接收“dd”、“mm”或“yyyy”的开关变量)。该函数使用输入字段的值按如下方式调用,因此不应存在任何基于对象的问题:

onblur=”validateDOB(this.value, ‘mm’);

我花了很长时间试图弄清楚这个问题,parseInt() 语句似乎有问题。在您通过 08(零、八)或 09(零、九)之前,这在几天和几个月内都可以正常工作。这里 parseInt() 的结果分别返回 0 而不是 8 或 9。
但这只是 08 和 09 的问题,将数字 01 传递给 07 会按预期返回 1 到 7。
类似地,当将 1 到 9 的单个数字传递给函数时,parseInt() 将适当的值作为整数返回。

真的很难理解这一点。相反,完全删除 parseInt 语句似乎可行,但这会将 dobNum 值保留为字符串,我认为这不是特别好的做法。

任何人都可以阐明这一点吗? (这个问题在firefox和IE中都有)非常感谢,SMc

var DOBddOK = false;
var DOBmmOK = false;
var DOByyyyOK = false;

function validateDOB (dobNum, dmy) {
// Set Regexp based on dmy var.
if (dmy.length == 2) var reg = /^([0-9]{1,2})$/;
else var reg = /^([0-9]{4})$/;
var numOK = reg.test(dobNum);
alert("NumOK: "+numOK); //test

// If dobNum value passes regExp test then convert it to an integer
if (numOK) {
var numVar = parseInt(dobNum);
//var numVar = dobNum;
alert("NumVar: "+numVar); //test
}
alert("dmy: "+dmy); //test

switch (dmy) {
case "dd":
if (numOK && numVar <= 31 && numVar > 0) DOBddOK = true;
else DOBddOK = false;
break;
case "mm":
if (numOK && numVar <= 12 && numVar > 0) DOBmmOK = true;
else DOBmmOK = false;
break;
case "yyyy":
var d = new Date();
d = d.getFullYear();
if (numOK && numVar <= (d-18) && numVar >= (d-80)) DOByyyyOK = true;
else DOByyyyOK = false;
break;
}
}

最佳答案

parseInt 函数在传递的字符串中找到前导零时,它会隐式地将数字解析为八进制数。

始终建议使用基数参数:

parseInt('08', 10); // 8
parseInt('09', 10); // 9

随着时间的推移,这导致了很多问题,以至于在新版本的语言标准 ECMAScript 5 中,隐式八进制检测已从 parseInt algorithm 中删除。 .但是 ES5 还没有完全支持。

还有其他方法可以在 JavaScript 中将字符串转换为数字,但不会出现此问题,例如:

unary plus运算符(operator):

+'08'; // 8

The Number constructor called as a Function :

Number('08'); // 8

在我看来,parseInt 和我描述的后两种方式具有(微妙的)不同语义

前者显然是解析,例如:

parseInt('12px');    // 12
parseInt('10yo'); // 10
parseInt('1111', 2); // 15

最后两种方法是进行字符串到数字的类型转换

关于javascript - parseInt() 返回不正确的值; DOB验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3446805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com