Comment valider des nombres décimaux dans PHP. J'ai regardé is_numeric () mais cela ne fonctionnera pas pour moi:
BOOL IS_Numeric (var) p>
trouve si la variable donnée est numérique. Les chaînes numériques sont constituées de signe facultatif, n'importe quel nombre de chiffres, partie décimale optionnelle
et facultative partie exponentielle forte>. Ainsi + 0123.45E6 est un Valeur numérique valide. hexadécimal la notation (0xFF) est autorisée trop forte> mais seulement sans signe, décimal et partie exponentielle. p> blockQuote>
Je ne veux pas la partie exposante ou la notation hexadécimale. strong> L'utilisateur entrera dans des valeurs décimales simples et je ne veux pas de type-O qui arrive à être un exposant ou une valeur hexagone valide pour passer le passé. J'aimerais juste que les nombres décimaux "traditionnels" soient confondés valides. P> Modifier strong> une page simple (force brute) qui contient des données de test beaucoup plus complètes (ce qui devrait et devrait ne pas être considéré comme une valeur numérique). p>
xxx pré> p>
6 Réponses :
$decimal = preg_match('/^[+\-]?\d+(\.\d+)?$/', $value) ? (float)$value : 0.0;
Cela ne correspondra pas aux valeurs contenant un seul chiffre, je crois /^[+\-]?d+(?:\.\d+)?$/ pourrait fonctionner
@RR: Il correspond à l'amende des chiffres simples. Je ne suis pas un expert de regex, donc je l'ai branché dans un fichier; Mais autant que je sache, la possibilité à un chiffre est ce que le ()? code> autour du
\. \ d + code> est pour.
Les parenthèses n'étaient pas là quand j'avais initialement fait le commentaire :)
J'ai oublié d'inclure cela dans mes valeurs d'échantillons, mais .5 code> ne fonctionne pas avec ce code.
$number = preg_match($number, '/\\A\\s*[+\\-]?\\d*(\\.\\d+)?\\s*\\Z/') ? trim($number) : 'INVALID'; if ($number === '') { $number = '0'; } if ($number === 'INVALID') { // handle }
Qu'en est-il d'une expression régulière? Preg_Match (/ [+ \ - -]? \ d * (\ \ \ d +)? ([[ee] [+ \ -]? D +)? /, $ var); Code> Le
[ EE] code> Bit et après avoir permis aux personnes d'entrer 2.3e2 pour des nombres vraiment gros ou vraiment petits, alors laissez cela si vous ne le voulez pas. Tout cela permettra:
2
0.3
.3
2.2
+2.2
-2.2
2.3e3
2.3E-3
L'expression régulière ressemblerait à quelque chose comme
J'ai oublié d'inclure cela dans mes valeurs d'échantillons, mais .5 code> ne fonctionne pas avec ce code.
mis à jour avec vos données de test. ou couper l'entrée d'abord p>
$value = (float)$value;
Juste pour les arguments, ne devriez-vous pas être indulgent sur quelque chose comme
- 1 code> ou
++ 1 code>?
@Jason McCreary, les données sont utilisées par quelque chose qui n'est pas indulgent sur quelque chose comme
- 1 code> ou
++ 1 code>
Devrait
.5 code> être considéré comme valide (comme
0.5 code>)?
Fonction IS_Numeric PHP php.net/manual/fr/function.is-numeric.php