javascript - 包含“。”的数字的问题 像 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;
}
解决方案
您可以使用正则表达式并查找一到四位数字。
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)));
推荐阅读
- django - 无法创建 Django CreateView 对象,因为数据未验证
- swift - 为什么 UITableView 为每个单元格显示相同的视图?
- reactjs - Jest Unit Test - 使用道具模拟组件
- android - Xamarin.Forms android WebView 空白,没有有效的 SSL 证书(开发环境)
- r - R查找按访问ID细分的总计数
- vb.net - 数据表到 Crystal Reports(缺少字段)
- javascript - 如何在不同的时间触发不同的 setInterval 函数?
- python - 使用 openpyxl 删除现有数据验证
- linux - 跳过 Sendmail 的队列
- django - 如何在 django 中设置多个自定义应用程序的路径?