Masque de saisie numérique et décimal

J’ai réalisé une facturation de gestion d’applications logicielles après avoir testé mon programme. J’ai remarqué l’erreur suivante: ma table dans sqlserver contient: price numeric (6,2) L’utilisateur de mon programme entre le prix car 555.00 est bon. mais quand il a mis 555555 c’est une erreur, j’ai donc besoin de spécifier le masque où la mantisse est facultative de 0 à 999 et la partie décimale est programmable 2 ou 3 selon le choix de l’utilisateur, j’utilise le plugin d’entrée JQuery Masked et j’ai pas trouvé bonne expression régulière, s’il vous plaît, aidez-moi, je travaille avec jsp / servlet.

Vous pouvez utiliser numérique jquery pour les nombres.
La version actuelle permet ce que vous cherchez, mais quelqu’un a un peu modifié le code et cela fonctionne:

HTML

 

Javascript

 $(".numeric").numeric({ decimal : ".", negative : false, scale: 3 }); 

Ceci est la source entière.
Et j’ai préparé ce violon pour que vous puissiez voir comment cela fonctionne.

Utilisation du plug-in de masque de saisie jQuery (6 décimales et 2 décimales):

HTML:

  

jQuery:

 $(".mask").inputmask('Regex', {regex: "^[0-9]{1,6}(\\.\\d{1,2})?$"}); 

J’espère que ça aidera quelqu’un

Vous pouvez le faire en utilisant le plugin jquery inputmask .

HTML:

  

Javascript:

 $('#price').inputmask({alias: 'numeric', allowMinus: false, digits: 2, max: 999.99}); 

ou aussi

  

avec

 function handleNumber(event, mask) { /* numeric mask with pre, post, minus sign, dots and comma as decimal separator {}: positive integer {10}: positive integer max 10 digit {,3}: positive float max 3 decimal {10,3}: positive float max 7 digit and 3 decimal {null,null}: positive integer {10,null}: positive integer max 10 digit {null,3}: positive float max 3 decimal {-}: positive or negative integer {-10}: positive or negative integer max 10 digit {-,3}: positive or negative float max 3 decimal {-10,3}: positive or negative float max 7 digit and 3 decimal */ with (event) { stopPropagation() preventDefault() if (!charCode) return var c = Ssortingng.fromCharCode(charCode) if (c.match(/[^-\d,]/)) return with (target) { var txt = value.subssortingng(0, selectionStart) + c + value.substr(selectionEnd) var pos = selectionStart + 1 } } var dot = count(txt, /\./, pos) txt = txt.replace(/[^-\d,]/g,'') var mask = mask.match(/^(\D*)\{(-)?(\d*|null)?(?:,(\d+|null))?\}(\D*)$/); if (!mask) return // meglio exception? var sign = !!mask[2], decimals = +mask[4], integers = Math.max(0, +mask[3] - (decimals || 0)) if (!txt.match('^' + (!sign?'':'-?') + '\\d*' + (!decimals?'':'(,\\d*)?') + '$')) return txt = txt.split(',') if (integers && txt[0] && count(txt[0],/\d/) > integers) return if (decimals && txt[1] && txt[1].length > decimals) return txt[0] = txt[0].replace(/\B(?=(\d{3})+(?!\d))/g, '.') with (event.target) { value = mask[1] + txt.join(',') + mask[5] selectionStart = selectionEnd = pos + (pos==1 ? mask[1].length : count(value, /\./, pos) - dot) } function count(str, c, e) { e = e || str.length for (var n=0, i=0; i 

Maintenant que je comprends mieux ce dont vous avez besoin, voici ce que je propose. Ajoutez un gestionnaire keyup pour votre zone de texte qui vérifie le contenu de cette zone avec cette expression rationnelle ^[0-9]{1,14}\.[0-9]{2}$ et si cela ne correspond pas, rendez l’arrière-plan rouge ou montrer un texte ou ce que vous aimez. Voici le code à mettre dans document.ready

 $(document).ready(function() { $('selectorForTextbox').bind('keyup', function(e) { if (e.srcElement.value.match(/^[0-9]{1,14}\.[0-9]{2}$/) === null) { $(this).addClass('invalid'); } else { $(this).removeClass('invalid'); } }); }); 

Voici un JSFiddle de ceci en action. Faites également la même chose côté serveur regex et si cela ne correspond pas, les conditions requirejses ne sont pas remplies. Vous pouvez également effectuer cette vérification de l’événement onsubmit et ne pas laisser l’utilisateur soumettre la page si la regex ne correspond pas.

La raison pour laquelle le masque n’est pas appliqué lors de l’insertion de texte est que cela complique beaucoup les choses. Par exemple, comme je l’ai mentionné dans le commentaire, l’utilisateur ne peut pas commencer à saisir l’entrée valide, car son début n’est pas valide. C’est possible cependant, mais je suggère plutôt cela.

Essayez imaskjs . Il a le numéro, RegExp et autres masques. Très simple à étendre.