J'essaie d'utiliser une validation d'expression régulière pour vérifier uniquement les valeurs décimales ou les valeurs numériques. Mais l'utilisateur entre une valeur numérique, il ne doit pas s'agir du premier chiffre "0"
Comment je fais ça?
Un chiffre compris entre 1 et 9 suivi de zéro ou de plusieurs autres chiffres:
^[1-9]\d*$
Autoriser les nombres avec un point décimal optionnel suivi de chiffres. Un chiffre compris entre 1 et 9 suivi de zéro ou de plusieurs autres chiffres, suivi éventuellement d'un point décimal suivi d'au moins 1 chiffre:
^[1-9]\d*(\.\d+)?$
Remarques:
Les ancres ^
et $
au début et à la fin, indiquant essentiellement que la chaîne entière doit correspondre au modèle
()?
fait correspondre 0 ou 1 de l'ensemble entre parenthèses
Mise à jour pour gérer les virgules:
Dans les expressions régulières, .
a une signification particulière - faites correspondre n'importe quel caractère. Pour faire correspondre littéralement un .
dans une chaîne, vous devez échapper le .
à l'aide de \.
. Ceci est la signification du \.
dans l'expression rationnelle ci-dessus. Donc si vous voulez utiliser une virgule, le modèle est simplement:
^[1-9]\d*(,\d+)?$
Nouvelle mise à jour pour gérer les virgules et les points.
Si vous voulez autoriser un. entre groupes de chiffres et a, entre l'intégrale et les fractions, puis essayez:
^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
c’est-à-dire qu’il s’agit d’un chiffre compris entre 1 et 9, suivi de 2 autres chiffres au maximum, de zéro ou de plusieurs groupes d’arrêt complet, suivi de 3 chiffres, suivi éventuellement d’une virgule et de chiffres comme précédemment.
Si vous voulez autoriser un. n'importe où entre les chiffres puis essayez:
^[1-9][\.\d]*(,\d+)?$
c'est-à-dire un chiffre de 1 à 9 suivi de zéro ou de plusieurs chiffres ou d'un point complet suivi éventuellement d'une virgule et d'un ou de plusieurs chiffres.
J'ai eu le même problème, mais je voulais aussi que ".25" soit un nombre décimal valide. Voici ma solution en utilisant JavaScript:
function isNumber(v) {
// [0-9]* Zero or more digits between 0 and 9 (This allows .25 to be considered valid.)
// ()? Matches 0 or 1 things in the parentheses. (Allows for an optional decimal point)
// Decimal point escaped with \.
// If a decimal point does exist, it must be followed by 1 or more digits [0-9]
// \d and [0-9] are equivalent
// ^ and $ anchor the endpoints so tthe whole string must match.
return v.trim().length > 0 && v.trim().match(/^[0-9]*(\.[0-9]+)?$/);
}
Où ma méthode trim () est
String.prototype.trim = function() {
return this.replace(/(^\s*|\s*$)/g, "");
};
Matthew DesVoigne
J'ai testé toutes les expressions rationnelles données mais malheureusement aucune d'entre elles n'a réussi ces tests
String []goodNums={"3","-3","0","0.0","1.0","0.1"};
String []badNums={"001","-00.2",".3","3.","a",""," ","-"," -1","--1","-.1","-0", "2..3", "2-", "2...3", "2.4.3", "5-6-7"};
Voici le meilleur que j'ai écrit qui passe tous ces tests:
"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"
Voici un grand regex de travail pour les nombres. Ceci accepte un nombre avec des virgules et des décimales.
/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
Essayez ce code, espérons qu'il vous aidera
String regex = "(\\d+)(\\.)?(\\d+)?"; for integer and decimal like 232 232.12
/([0-9]+[.,]*)+/
correspond à n'importe quel numéro avec ou sans coma ou points
ça peut correspondre
122
122,354
122.88
112,262,123.7678
bug: il correspond aussi à 262.4377.3883 (mais peu importe)
Voici mon regex pour valider les nombres:
^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$
Numéros valides:
String []validNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
Nombre invalide:
String []invalidNumbers={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
si vous avez besoin de valider un nombre décimal avec des points, des virgules, des points positifs et des points négatifs, essayez ceci:
Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);
Bonne chance.
Voici le parfait pour l'exigence mentionnée:
^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$