Maison  >  Questions et réponses  >  le corps du texte

Vérifiez si une chaîne PHP est constituée uniquement d'entiers

J'écris un code PHP pour valider certaines données saisies par l'utilisateur, dont l'une est un entier, qui renvoie vrai lorsque j'utilise $_REQUEST["age"]来获取它,当我用gettype($_REQUEST["age"]) == "integer"is_int($_REQUEST["age"])检查这个值是否为整数时,两者都返回false,但是当我使用is_numeric($_REQUEST["age"]). Je veux vérifier si la valeur d'un paramètre est un entier, est-ce que j'utilise correctement les deux premières fonctions ou est-ce qu'il me manque quelque chose ?

Merci

Remarque : j'essaie de sortir gettype($_REQUEST["age"]),它给我返回string

P粉788765679P粉788765679417 Il y a quelques jours615

répondre à tous(2)je répondrai

  • P粉293550575

    P粉2935505752023-09-22 16:02:18

    <?
         if(intval($_REQUEST["age"]) > 0):
            echo '整数';
         else:
            echo '其他';
         endif;
    ?>

    répondre
    0
  • P粉107772015

    P粉1077720152023-09-22 09:25:38

    Version courte :

    Utilisez ctype_digit($_REQUEST['age'])

    Version détaillée :

    Votre problème est que lorsque vous utilisez gettype时,$_REQUEST返回一个字符串。即使该字符串在语义上是一个整数,比如16, il s'agit toujours d'une variable de type chaîne, pas d'une variable de type entier. La raison pour laquelle vous obtenez des résultats différents avec ces deux tests est qu'ils testent des choses différentes :

    • is_numeric测试一个字符串是否包含一个"可选符号、任意数量的数字、可选的小数部分和可选的指数部分",根据PHP文档。在你的情况下,该字符串只包含数字,所以测试返回True.
    • is_int测试变量的类型是否为整数 - 但它不会是整数,因为它是由$_REQUESTRevenu.

    C'est pourquoi is_numeric返回Trueis_int返回False的原因:该字符串只包含数字(所以是"numeric"),但在技术上仍然是一个字符串类型,而不是整数类型(所以不是"int")。当然,is_numeric对于整数测试来说是不够的,因为如果字符串有小数或使用科学计数法,它将返回True est un nombre mais pas un entier.

    Pour tester si $_REQUEST est un entier, quel que soit le type technique, vous pouvez tester si tous les caractères de la chaîne sont des nombres (et donc la chaîne entière est un entier). Pour cela vous pouvez utiliser ctype_digit :

    ctype_digit($_REQUEST['age'])

    Cela fonctionnera pour 16返回True,但对16.516e0不返回True - Cela vous permettra de filtrer les entiers des nombres non entiers.

    répondre
    0
  • Annulerrépondre