Dupliquer possible:
Vérifie si une variable est un nombre naturel
Je viens juste de trouver où je dois purifier une entrée et supprimer tous les caractères non numériques avec PHP. Je pensais pouvoir faire une fonction moi-même, mais je voulais d'abord vérifier les fonctions intégrées possibles pour ne pas perdre de temps à réinventer la roue.
Vous pouvez utiliser une expression régulière comme ci-dessous
$int = (int) preg_replace('/\D/', '', $strNonNumeric);
OR
$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
Il n'y a pas d'équivalent direct à pareseInt()
dans PHP car PHP n'a pas de type de données NaN
. parseInt()
produira NaN
si la valeur ne peut pas être analysée.
De plus, parseInt()
a le paramètre radix, qu’aucune des options PHP ne vous donne.
Mais ceci dit, si tout ce que vous voulez faire est de transformer une chaîne en entier, il y a plusieurs options:
$int = (int)$string;
$int = intval($string);
$int = settype($string,'integer');
Ces trois fonctionneront tous de la même manière. Il peut y avoir des cas dans lesquels intval()
diffère des deux autres, mais en général, ils transformeront une chaîne en un entier. En l'absence de NaN
, ils génèrent tous 0
(zéro) si la chaîne n'est pas numérique et ne peut pas être analysée. Mais cela devrait être suffisant pour la plupart des objectifs d'assainissement de la base de données.
Si vous voulez vraiment une erreur NaN
, le plus proche que vous obtiendrez est null
. Vous pouvez obtenir ceci en utilisant filter_var()
:
$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
Si vous voulez juste vérifier que la chaîne est numérique, la fonction is_numeric()
peut le faire:
$bool = is_numeric($string);
Cependant, cela revient à vrai pour les décimales et aussi pour la notation scientifique, de sorte que peut ne pas être parfait pour la plupart des situations. Une meilleure option est ctype_digit()
qui renvoie true si la chaîne est composée uniquement de chiffres:
$bool = ctype_digit($string);
Si cela ne convient pas, il y a toujours l'option regex, utilisant preg_match()
ou preg_replace()
, mais elles sont définitivement excessives pour ce type de scénario.
Vous pouvez utiliser:
$string = "90"; //string
$myInt = (int) $string; //parse to int
Je recommanderais d'utiliser FILTER_VALIDATE_INT Filter.
Vous pouvez également utiliser sscanf (comme vous le faites en C)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
Sortie:
100