Javascript 使用包含“a”的数字发出&引用;比如1.11或1.111
用户需要在文本框中输入一个介于0和9999之间的数字,我想检查此字符串是否为介于0和9999之间的有效整数。如果用户在文本框中输入多个数字,例如16和1,则验证应返回false 如果字符串中有一个“.”,我有一个问题。1.11返回true,但应返回false,而.111变为0.111,并返回true而不是false。我希望带“.”的字符串返回false。我该怎么做 我测试了以下案例:Javascript 使用包含“a”的数字发出&引用;比如1.11或1.111,javascript,Javascript,用户需要在文本框中输入一个介于0和9999之间的数字,我想检查此字符串是否为介于0和9999之间的有效整数。如果用户在文本框中输入多个数字,例如16和1,则验证应返回false 如果字符串中有一个“.”,我有一个问题。1.11返回true,但应返回false,而.111变为0.111,并返回true而不是false。我希望带“.”的字符串返回false。我该怎么做 我测试了以下案例: 0 returns true 1117 returns true 9999 returns true 17000
0 returns true
1117 returns true
9999 returns true
17000 returns false
0,1 returns false
A1 returns false
16 1 returns false
16_1 returns false
1.11 returns true but it should return false
.111 returns true but it should return false
1.11和.111无法正常工作,因为它们返回的是true而不是false。
代码有什么问题
handlers.CheckTextboxstring = function (args, context)
{
var TextboxNumber = validate(args.Textboxstring);
return TextboxNumber.NewNumber;
}
function validate(str)
{
if(!isEmptyOrSpaces(str))
{
let num=Number(str);
if(num!==NaN)
{
if(num >= 0 && num <= 9999)
{
return{NewNumber: "true, number is in range."};
}
else
{
return{NewNumber: "false, number not in range."};
}
}
else
{
return{NewNumber: "false, string is NaN."};
}
}
else
{
return{NewNumber: "false, the string is not a number."};
}
}
function isEmptyOrSpaces(str)
{
return str === null || str.match(/^ *$/) !== null;
}
handlers.CheckTextboxstring=函数(args,上下文)
{
var TextboxNumber=validate(args.Textboxstring);
返回TextboxNumber.NewNumber;
}
函数验证(str)
{
if(!isEmptyOrSpaces(str))
{
设num=Number(str);
如果(num!==NaN)
{
如果(num>=0&&num,可以使用正则表达式查找一到四位数字
功能检查{
返回/^([1-9]\d{0,3}|0)$/.test;
}
['0'、'1117'、'9999'、'17000'、'0,1'、'A1'、'161'、'16_1'、'1.11'、'.111'、'1.0'、'00'].map(s=>console.log(check(s));
JavaScript表示浮点数,这意味着它可以处理整数和小数。从这个意义上说,没有什么“错误”对于您的代码,您只需要添加额外的检查,以确保读入的数字实际上是一个整数
为此,您可以使用在对值进行强制转换后进行检查,也可以跳过读取并使用而不是Number()
进行检查
或者,如@NinaScholz所指出的,如果您想采取完全不同的方法,您可以直接使用正则表达式来确保字符串中除了1到4个数字之外没有任何内容
旁注:您的代码中有if(num!==NaN)
,但出于我不在此赘述的原因,NaN!==NaN
仍将返回true
。请改用。关于0000
?关于检查Number.isInteger(num)
之类的东西呢?为什么不将正则表达式仅用于^[0-9]*$then use condition(num>=0&&num如果他们不需要前导零,那么/^0$| ^[1-9][0-9]{0,3}$/
@georg Thanx。我不需要前导零。如果我使用函数检查,是否仍然需要进行NaN检查?例如:Number.isNan(s)在函数的开头?不,您可以只使用正则表达式。请参见“编辑”中的“仅为零”或“不带前导零的数字”。