0

我有一个来自数据库的字符串值。
我需要检查这个值是整数还是字符串。
我试过is_intand is_numeric,但它们都不是我需要的。

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

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

4

3 回答 3

8
$stringIsAnInteger = ctype_digit($string);

ctyped_digit()

于 2013-01-14T08:48:56.670 回答
1

您可以使用ctype_digit()— 检查数字字符。检查提供的字符串 text 中的所有字符是否都是数字。

示例 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";
    }
}
?>

以上将输出

The string 1820.20 does not consist of all digits.
The string 10002 consists of all digits.
The string wsl!12 does not consist of all digits.

示例 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
?>
于 2013-01-14T08:53:48.830 回答
1

我觉得你的方式是最好的。
我在一个简单的正则表达式中没有看到任何复杂的东西,所以,在你的位置我不会寻找更简单的。

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

而您自己的解决方案既简单又强大。

更新:
所有说“不要使用正则表达式,其中简单的字符串函数可以用于性能等等”的所有评论都直接来自上个世纪。

  • 这并不意味着“即使没有任何字符串函数适合您,也不要使用正则表达式”
  • 现在是 XXI,计算机速度非常快,尤其是在文本解析这样简单的问题上。如此简单的正则表达式永远不会成为您应用程序的瓶颈。因此,就性能优化而言,没有一个理由比正则表达式更喜欢字符串函数。在现实生活中的应用程序上,您永远不会注意到(或衡量)任何差异。
于 2013-01-14T09:11:23.043 回答