如果我想检查php中的值是string还是int

如果我想检查php中的值是string还是int,php,Php,我有一个来自数据库的字符串值。 我需要检查此值是整数还是字符串。 我试过是int和是numeric,但它们都不是我需要的 is_int如果值是字符串类型,则始终返回false;如果值包含数字,则is_numeric返回true 我使用的是preg_match('/^\d+$/',$value),在这种情况下,我正在寻找一个简单的解决方案 $stringIsAnInteger = ctype_digit($string); 您可以使用ctype\u digit()-检查数字字符。检查所提供字符串

我有一个来自数据库的字符串值。
我需要检查此值是整数还是字符串。

我试过
是int
是numeric
,但它们都不是我需要的

is_int
如果值是字符串类型,则始终返回false;如果值包含数字,则
is_numeric
返回true

我使用的是
preg_match('/^\d+$/',$value)
,在这种情况下,我正在寻找一个简单的解决方案

$stringIsAnInteger = ctype_digit($string);

您可以使用
ctype\u digit()
-检查数字字符。检查所提供字符串文本中的所有字符是否为数字

示例1

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>
示例2

<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>

我发现你的路是最好的。
我在一个简单的正则表达式中看不到复杂的东西,所以,在你的位置上,我不会寻找更简单的

说到复杂性,不要只局限于调用方代码。
它可以像单个函数调用一样短。但您无法确定底层代码,它可能非常复杂,而且(一件重要的事情)有一些问题,就像这里命名的每个函数一样

而您自己的解决方案既简单又健壮

更新:
所有说“不要使用regexp,因为简单的字符串函数可以用于性能等等”的话都是上个世纪直接说出来的

  • 这并不意味着“即使没有一个字符串函数适合您,也不要使用regexp”
  • 现在已经是21世纪了,计算机的速度非常快,特别是在文本解析这样简单的事情上。这样一个简单的regexp永远不会成为应用程序的瓶颈。因此,在性能优化方面,没有一个理由比regexp更喜欢字符串函数。在现实生活应用程序上你永远不会注意到(或测量)任何差异

整数也可能有负号
is_int()
is_numeric()
应该适用于数字。。。您可能做错了其他事情。@您的常识在我的例子中,所有值都是正整数或字符串包含整数。无论如何,谢谢你的好意reminder@Vegeris_int()不应该,而is_numeric()也允许使用浮点数。我想提供一些示例,以便读者更容易理解,因为所有信息都在一页中。不必通过URL进行访问。感谢您的回复,@KingCrunch首先回答问题,因此我接受了这个答案。谢谢,它很有效。还有一个问题,有没有简单的方法来处理带小数点和/或减号的值?@MichaelLaw
是数值()应该这样做。O…..我误解了手册中的示例,即带数字的字符串值总是会通过…谢谢你在
preg_match
中,有一个提示说不要使用preg_match()如果只想检查一个字符串是否包含在另一个字符串中。使用strpos()或strstr(),因为它们会更快。因此,我认为如果有一个本机函数,它将比使用regex更好。
<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>