验证正则表达式的数量为百分之......?

时间:2017-05-17 22:44:31

标签: javascript validation

我对社区有问题我有一个查询,我需要一个验证正则表达式,对于没有小数的金额,考虑有效的以下结构。

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})?$/;

我等你的评论。

谢谢。

2 个答案:

答案 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}))$

这将 通过您建议的测试,但 与实际数字相匹配。