【发布时间】:2021-11-27 22:21:03
【问题描述】:
我正在编写一个输入字段清理函数,该函数应检查输入值是否为十进制。
测试用例:
-
1234- 是的 -
12.34- 是的 -
0.123- 是的 -
000045- 是的 -
000.45- 错误 -
.45685- 错误 -
5..454- 错误 -
55874.- 是的 -
000000- 是的 -
0.0.- 错误
我不想显示验证错误,我只想防止用户输入错误的十进制值。
这个正则表达式/^[0-9]+\.?[0-9]+/ 涵盖了除第 5 点之外的所有情况。
我想这里唯一可以使用的方法是String.prototype.replace(),以便删除不需要的错误字符。
附:此验证与HTML input type number 原生验证非常相似,不同之处在于第 5 点被接受为有效数字类型。
更新!
const rgx = /^[0-9]+\.?[0-9]+$/
const cases = [
["1234", true],
["12.34", true],
["0.123", true],
["000045", true],
["000.45", false],
[".45685", false],
["5..454", false],
["55874.", true],
['000000', true],
['0.0.', false],
]
cases.forEach(([str, result]) => {
const actual = rgx.test(str);
if (actual !== result) {
console.log(`Test case "${str}" failed, gave ${actual} but expected ${result}.`);
}
});
【问题讨论】:
-
您不想阻止用户输入“55874”。从您的上一个用例开始,因为他们可能打算用另一个数字跟进,例如“55784.1”,这是一个有效的小数
-
感谢您的留言,更新了问题。
-
试试
const rgx = /^(?:0(?:(?:0*[1-9]\d*)?|(?=\.))|[1-9]\d*)(?:\.[0-9]*)?$/ -
案例 '00000' 失败但不应该。
-
您根据@Dexygen 的评论编辑了问题,但您仍将
"55874."显示为匹配项。浮点数永远不会这样写。在下面的评论中,您声明“我需要用空字符串替换无效字符。”,但没有提及替换字符的问题。
标签: javascript html regex