首页 > 解决方案 > 包含“。”的数字的问题 像 1.11 或 .111

问题描述

用户需要在文本框中输入 0 到 9999 之间的数字,我想检查此字符串是否为 0 到 9999 之间的有效整数。如果用户在文本框中输入多个数字,例如 16 和 1那么验证应该返回false。

如果有“。”,我有一个问题。在字符串中。1.11 返回 true 但它应该返回 false 并且 .111 更改为 0.111 并返回 true 而不是 false。我想要一个带有“。”的字符串。返回假。我怎样才能做到这一点?

我已经测试了以下案例:

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;
}

标签: javascript

解决方案


您可以使用正则表达式并查找一到四位数字。

function check(s) {
    return /^([1-9]\d{0,3}|0)$/.test(s);
}

['0', '1117', '9999', '17000', '0,1', 'A1', '16 1', '16_1', '1.11', '.111', '1.0', '00'].map(s => console.log(check(s)));


推荐阅读