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
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
测试变量的类型是否为整数 - 但它不会是整数,因为它是由$_REQUEST
Revenu.C'est pourquoi
is_numeric
返回True
而is_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 :Cela fonctionnera pour
16
返回True
,但对16.5
或16e0
不返回True
- Cela vous permettra de filtrer les entiers des nombres non entiers.