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();
}
}
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.
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.
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)
});
Votre regex est incorrecte.
var regex = /^[0-9.,]+$/;
Regex javascript, pourquoi point et virgule correspondent à\
Parfois, /^[0-9.,]+$/
n'est pas un travail Sinon, vous pourriez faire quelque chose comme ceci:
/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/