web-dev-qa-db-fra.com

Comment valider les chiffres (y compris les flottants) en javascript

Actuellement, j'utilise cette exp reg:

var valid = (value.match(/^\d+$/));

Mais pour les chiffres tels que "0.40" ou "2.43", cela ne fonctionne pas. Comment puis-je changer cette exp exp ci-dessus pour correspondre aux flottants?

18
Click Upvote
var valid = (value.match(/^-?\d*(\.\d+)?$/));
21
mkedobbs

Vous n'avez pas besoin de regex pour ça! isNaN jettera votre valeur en Number:

var valid = !isNaN(value);

Par exemple:

!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true

Edition réticente (merci CMS):

La coercition de type saccadée, !isNaN(''), !isNaN(' '), !isNaN('\n\t'), etc. sont tous true!

Test de l'espace + isNaN FTW:

var valid = !/^\s*$/.test(value) && !isNaN(value);

Beurk.

48
Crescent Fresh

Poursuivant avec l'approche @Crescent Fresh , il y a quelque temps, je devais effectuer la validation du nombre, mais je devais vérifier si une variable contenait un nombre sans connaître son type. Il pourrait s'agir d'un String contenant une valeur numérique, comme dans Dans ce cas, (je devais aussi prendre en compte la notation exponentielle, etc.), un objet Number, en gros tout ce pour quoi je ne pouvais faire aucune hypothèse de type.

Et je devais faire attention à la conversion de type implicite, par exemple, en pointant @Crescent, isNaN n'était pas suffisant pour mon cas:

// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;

// boolean values
!isNaN(true) == true;
!isNaN(false) == true;

// etc..

J'ai fini par écrire un ensemble de 30+ tests unitaires que vous pouvez trouver et exécuter ici , et la fonction suivante est celle qui passe tous mes tests: 

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
26
CMS

Voici ma version de RegExp.

var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;

Rencontre

n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');

Ne correspond pas

n.test('');
n.test('+');
n.test('-');
5
KLicheR

C'est ce que j'utilise

/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
1
Eric

Vous pouvez essayer ma solution: /^-?\d+(\.?\d+)?$/.test(text)

0
var valid = (value.match(/^[\d.]+$/));
0
YOU

var valide = valeur.match (/\d +?.\d + /);

0
Ashish Datwani