web-dev-qa-db-fra.com

PHP équivalent de la fonction parseInt de JavaScript?

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.

16
think123

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);
28
GBD

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.

24
Spudley

Vous pouvez utiliser:

$string = "90"; //string
$myInt = (int) $string; //parse to int
5
Wayne Whitty

Je recommanderais d'utiliser FILTER_VALIDATE_INT Filter.

à propos des filtres sur php.net

3
Magnus Strand

Vous pouvez également utiliser sscanf (comme vous le faites en C)

<?php

    $str = "10";

    sscanf($str, "%d", $intVal);
    $intVal *= 10;

    echo $intVal;
?>

Sortie:

100

0
enhzflep