正则表达式 - 抓取小数(12,2)

时间:2016-05-19 18:18:43

标签: regex

当用户的模式与所需模式不匹配时,我正在使用正则表达式显示工具提示。

规则是:

  1. 必须匹配1到10位数或更少。例如:1234567890或0或123 .... 0位数字为空。不允许。
  2. 必须匹配最多10位数或更少的数字和一个点。例如:1234567890。或12.或1.或0。
  3. 必须匹配最多10位数或更少的数字和一个点。点后1或2位数。例如:1.1或1234.23或1234567890.1或1234567890.12或.1 OR .21
  4. 不允许.
  5. 到目前为止,我有这种模式^\d{0,8}?(\.)?(\d{1,2})?$ Link,但我无法理解如何同时匹配所有条件。

    此模式无法匹配1234567890.12(它应该)。它只匹配点.(不应该)。 我发现的一些帖子无法解决问题link

    我错过了什么?

    完整的功能

    $('.validation').bind({             
    
                 keyup:function(){
    
                       //var objectEvent=$(this);
                       var objectId=$(this).attr("id");
                       var objectEvent=$("#"+objectId);
    
    
                       if(objectId=="txt_Attend"){
                              var ck_input = /^\d+$/;
                              var msg="Oops! Only numbers 1-9 are allowed";
                              var extraVal ="0";
                       }
                       else if(objectId=="txt_SalesYTD"||objectId=="txt_PrevSales"){//alert(objectId);
                              //var ck_input = /^\d{0,10}((\.\d{1,2})?|(?<=\d)\.)$/;
                              var ck_input = /^(?!\.$)\d{0,10}(?:\.(?:\d\d?)?)?$/;
                              var msg="Enter a valid value. Ex: 123.35";
                              var extraVal ="";
                              //alert(ck_input);
                       }
                       var input = $.trim(objectEvent.val());
                       var validationTest =ck_input.test(input);   
                       //alert(validationTest);
                       //QTY field Validation --------------------------------------------------------------------------------------------------
    
                       if(!validationTest||input===extraVal){//If not match ck_input
                             //alert("algo errado"+input);                                                        
                                     objectEvent.val('');//Clear input field
                                     objectEvent.attr('data-original-title',msg);
                                     objectEvent.tooltip('show');
                                     setTimeout( function(){ 
                                           objectEvent.tooltip('hide');
                                           objectEvent.removeAttr('title');
                                           objectEvent.removeAttr('data-original-title'); 
                                       }  , 2500 ); //Wait 2,5 seconds     
                       }                   
                       else{//If validation match ck_input
    
    
                             objectEvent.tooltip('hide');
                                                objectEvent.removeAttr('title');
                                                objectEvent.removeAttr('data-original-title');   
    
                       }//End of else if(!validationTest||input==='0'){
                 }//Fim keyUp
        });//End of $('.validation').bind({
    

2 个答案:

答案 0 :(得分:1)

您需要将第一个愤怒更改为{0,10}并将点和第二个数字放在同一个捕获组中,并带有一个必须以数字开头的可选点:

^\d{0,10}((\.\d{1,2})?|(?<=\d)\.)$

请参阅演示:https://regex101.com/r/jG3uK7/4

答案 1 :(得分:1)

您可以使用此

^(?!\.$)\d{0,10}(?:\.(?:\d\d?)?)?$

<强> Regex Demo