2017-08-17 1 views
-3

J'ai un problème pendant la validation d'une zone de texte avec un nombre jusqu'à 11 chiffres, y compris des nombres décimaux et deux chiffres après la virgule (le cas échéant). Sur le clavier dans jquery.Expression régulière pour un nombre avec une limite de longueur de chiffre incluant la décimale

J'ai utilisé cette expression régulière /^(\d+)?([.]?\d{0,2})?$/g pour valider un nombre et une décimale avec deux chiffres, mais je ne sais pas savoir comment à la contrainte chiffres maximum à 11.

J'ai utilisé le numéro de type entrée avec maxlength mais cela ne fonctionne pas.

Fiddle Is here

Html

<input type="number" /> 

jQuery

$('input').keyup(function() { 
     var $th = $(this); 
     $th.val($th.val().match(/^(\d+)?([.]?\d{0,2})?$/g, 
     function(str) { 
      return ''; } 
     )); 
    }); 

valeurs comme celui-ci

64.123.841,33 123456789,1, 12345678901, 1,22,

S'il vous plaît aidez-moi à ce sujet.

+1

Pourriez-vous donner quelques exemples de valeurs valides et non valides. Par exemple, '12345678901.11' serait-il valide? –

+2

total 11 chiffres ou 11 chiffres avant la virgule –

+0

@RoryMcCrossan comme 123456789.1, 12345678901, 1.22 – wikijames

Répondre

2
^\d{0,8}\.\d{1,2}$|^\d{0,11}$ 

here est l'exemple de travail

+0

Regardez à nouveau votre exemple regex101. Ce n'est pas vraiment correspondre comme il se doit. Il correspond à '3123123' comme une correspondance,' .' comme une, et '22' comme une seule. – Olian04

+0

@ Olian04 ne vérifie qu'une seule fois –

1

utiliser un test avant de tester la longueur:

/^(?=.{1,11}$)\d+(?:\.\d{1,2})?$/ 

(?=.{1,11}$) est un préanalyse qui font que nous avons 1 jusqu'à 11 caractères

(?:\.\d{1,2})? est un groupe facultatif de non capture qui permet 1 ou 2 décimales

+1

Pourquoi pas 'maxlength =" 11 "'? –

+0

@ WiktorStribiżew: Parce que OP veut une regex. Mais, bien sûr, l'attribut 'maxlength =" 11 "' est une autre solution. – Toto