2016-05-19 10 views
1

Ich verwende eine Regex, um eine QuickInfo anzuzeigen, wenn das Muster des Benutzers nicht mit dem gewünschten Muster übereinstimmt.Regex - Dezimalzahl (12,2)

Die Regeln sind:

  1. Muss 1 bis 10 Ziffern entsprechen oder weniger. Bsp .: 1234567890 oder 0 oder 123 .... 0 Ziffern ist leer. Nicht erlaubt.
  2. Muss mit maximal 10 Ziffern oder weniger und einem Punkt übereinstimmen. Beispiel: 1234567890 oder 12. oder 1. oder 0.
  3. Muss mit maximal 10 Ziffern oder weniger und einem Punkt übereinstimmen. und 1 oder 2 Ziffern nach dem Punkt. Bsp .: 1.1 oder 1234.23 oder 1234567890.1 oder 1234567890.12 OR .1 ODER .21
  4. Nur . ist nicht erlaubt.

Bisher habe ich dieses Muster ^\d{0,8}?(\.)?(\d{1,2})?$Link aber ich kann nicht erkennen, wie alle Bedingungen auf einmal passen.

Dieses Muster kann nicht 1234567890.12 (es sollte) übereinstimmen. Und es ist der Punkt allein . (sollte nicht übereinstimmen). Einige Post, die ich gefunden habe, lösen das Problem nicht link.

Was fehlt mir?


Die komplette Funktion

$('.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({ 

Antwort

1

Sie müssen die erste Wut {0,10} und setzen Sie den Punkt und die zweite Zahl in derselben Capture-Gruppe mit einem optionalen Punkt ändern, der durch eine Ziffer vorangestellt werden muß:

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

Siehe Demo: https://regex101.com/r/jG3uK7/4

+0

Hallo Kasramvd Ihr Muster ist passend nicht '.1' und' .12' – zwitterion

+0

@zwitterion ich das Muster bearbeitet haben, versuchen Sie es jetzt. – Kasramvd

1

Sie kann diese

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

Regex Demo

+0

Hallo Rock, Regel 3. Ihr Muster passt nicht '.1' und' .12' – zwitterion

+0

@zwitterion siehe geänderte Regex – rock321987

+0

Hallo Rock dein Muster passt zum Punkt. Regel 4. Nicht erlaubt. Kasramvd fand das gute Muster – zwitterion