web-dev-qa-db-fra.com

Fonction Javascript nécessaire pour permettre les nombres, les points et les virgules

J'ai besoin de créer une fonction pour permettre aux nombres de points et de virgules. Donc, n'importe qui corrige la fonction suivante

function on(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]|\./;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}
8
WVW

Tout d’abord, votre expression régulière n’autorise pas les virgules, ce qui est votre exigence.

Deuxièmement, vous n’avez utilisé aucun quantificateur, votre expression rationnelle ne correspond donc qu’à un seul caractère - un de [0-9] ou un dot. Vous devez utiliser un quantificateur.

Troisièmement, au lieu d'utiliser pipe, vous pouvez uniquement déplacer tous les caractères de la classe de caractères.

Essayez d'utiliser la regex ci-dessous:

/^[0-9.,]+$/

Le quantificateur + est utilisé pour faire correspondre une ou plusieurs occurrences du motif.
Les ancres ^ et $ correspondent au début et à la fin de la chaîne, respectivement.

24
Rohit Jain

Pas besoin de JavaScript:

<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." />

Les navigateurs modernes vont gérer cela parfaitement.

Si vous souhaitez autoriser spécifiquement les virgules en tant que séparateurs de milliers et un seul point décimal, essayez ceci:

... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...

Notez que je suis fermement contre le blocage des entrées utilisateur. Ils devraient pouvoir taper ce qu'ils veulent et être informés s'ils entrent quelque chose d'invalide.

8

C'est la meilleure solution, à mon avis, couvre davantage de cas d'intrants et autorise les flotteurs.

     $( ".numerical" ).on('input', function() { 
                var value=$(this).val().replace(/[^0-9.,]*/g, '');
                value=value.replace(/\.{2,}/g, '.');
                value=value.replace(/\.,/g, ',');
                value=value.replace(/\,\./g, ',');
                value=value.replace(/\,{2,}/g, ',');
                value=value.replace(/\.[0-9]+\./g, '.');
                $(this).val(value)

        });
5
Martin
4
HIRA THAKUR

Parfois, /^[0-9.,]+$/ n'est pas un travail Sinon, vous pourriez faire quelque chose comme ceci:

/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/
1
Sanjib