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?
var valid = (value.match(/^-?\d*(\.\d+)?$/));
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.
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);
}
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('-');
C'est ce que j'utilise
/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
Vous pouvez essayer ma solution: /^-?\d+(\.?\d+)?$/.test(text)
var valid = (value.match(/^[\d.]+$/));
var valide = valeur.match (/\d +?.\d + /);