我对社区有问题我有一个查询,我需要一个验证正则表达式,对于没有小数的金额,考虑有效的以下结构。
99999999
(最大字符数为8,不包括逗号)
以下列情况为例,这些数字不必完全正确。
0 -> Ok
12 -> Ok
123 -> Ok
1234 -> Ok
12345 -> Ok
123456 -> Ok
1234567 -> Ok
12345678 -> Ok
123,4 -> Ok
123,45 -> Ok
123,456 -> Ok
123,456,7 -> Ok
123,456,78 -> Ok
123456789 -> Failed
123,456,789 -> Failed
123,45,6,78 -> Failed
12,3,45,6,78 -> Failed
12,345,678.50 -> Failed
12,456,7ab -> Failed
0.50 -> Failed
我只能验证8个数字字符的大小:
var regex8 = /^-?([0-9]{1,8})?$/;
我等你的评论。
谢谢。
答案 0 :(得分:0)
测试用例提供了对齐三位数逗号和小数点的检查,因此这里是我们需要的正则表达式:
var r= /\d+(,\d+)*(\.\d+)?/;
另一种情况,检查数字是否为小数,不考虑逗号;因此,最后一个测试用例是唯一不是十进制测试用例。然后,这是它的正则表达式。
var r= /[0-9]?[0-9]?(\.[0-9][0-9]?)?/;
我写了一个简单的代码片段来验证您发布的所有案例
var valid= ["0"
,"12"
,"123"
,"1234"
,"12345"
,"123456"
,"1234567"
,"12345678"
,"123,4"
,"123,45"
,"123,456"
,"123,456,7"
,"123,456,78"];
var invalid= [
,"123456789"
,"123,456,789"
,"123,45,6,78"
,"12,3,45,6,78"
,"12,345,678.50"
,"12,456,7ab"
,"0.50" ];
var r= /\d+(,\d+)*(\.\d+)?/;
//or: according to your logic [0-9]?[0-9]?(\.[0-9][0-9]?)?/;
valid.forEach(string=>{
var isDecimal = string.match(r);
console.log(string+ "::"+ !!isDecimal);
});
invalid.forEach(string=>{
var isDecimal = string.match(r);
console.log(string+ "::"+ !!!isDecimal);
});
答案 1 :(得分:0)
听起来你想验证一个数量从零到九十九百九十九九九九九九九 - 有或没有逗号分隔符。
对于没有小数的金额,您说"认为有效的是以下结构。的 99999999 强>"
但是您的测试用例并不能反映您所写的描述,例如
123,4
不符合所描述的格式,但您说它是"确定"。
要匹配正确的数字,除了您的测试用例显示的内容之外,您还需要一个1到8位数的字符串\d{1,8}
或 一个分组的正确放置逗号最多8位数。逗号总是在3位数之前:,\d{3}
,您可以有两组:(,\d{3}){0,2}
。
使用括号对两个备选方案进行分组,这会给出(\d{1,8})|(\d{1,2}(,\d{3}){0,2})
或锚定到输入的开始和结束:^((\d{1,8})|(\d{1,2}(,\d{3}){0,2}))$
这将 不 通过您建议的测试,但 将 与实际数字相匹配。