ctype_digit

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

ctype_digit检查数字字符

描述

ctype_digit(混合类型 $text): 布尔值

检查提供的 字符串 text 中的所有字符是否都是数字。

参数

text

要测试的字符串。

注意:

如果提供了一个介于 -128 到 255(包含)之间的 整数,则将其解释为单个字符的 ASCII 值(负值添加 256 以允许扩展 ASCII 范围内的字符)。任何其他整数都被解释为包含整数十进制数字的字符串。

警告

从 PHP 8.1.0 开始,传递非字符串参数已弃用。将来,该参数将被解释为字符串而不是 ASCII 代码点。根据预期行为,该参数应显式转换为 字符串,或者显式调用 chr()

返回值

如果字符串 text 中的每个字符都是十进制数字,则返回 true,否则返回 false。当以空字符串调用时,结果始终为 false

示例

示例 #1 一个 ctype_digit() 示例

<?php
$strings
= array('1820.20', '10002', 'wsl!12');
foreach (
$strings as $testcase) {
if (
ctype_digit($testcase)) {
echo
"字符串 $testcase 由所有数字组成。\n";
} else {
echo
"字符串 $testcase 不由所有数字组成。\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 一个 ctype_digit() 示例,比较字符串和整数

<?php

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

ctype_digit($numeric_string); // true
ctype_digit($integer); // false (ASCII 42 是 * 字符)

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

参见

添加注释

用户贡献的注释 14 个注释

info at directwebsolutions dot nl
12 年前
我尝试的所有基本 PHP 函数都返回了意外结果。我只想检查某些变量是否只包含数字。例如:当我在公共场所传播我的脚本时,我不能要求用户只使用数字作为字符串或整数。针对这些情况,我编写了自己的函数,该函数处理其他函数的所有不便之处,并且不依赖于正则表达式。有些人坚信正则函数会减慢脚本速度。

编写此函数的原因
1. is_numeric() 接受像 +0123.45e6 这样的值(但您会期望它不会)
2. is_int() 不接受 HTML 表单字段(例如:123),因为它们被视为字符串(例如:"123")。
3. ctype_digit() 期待所有数字都是字符串(例如:"123"),并且不验证真实的整数(例如:123)。
4. 某些函数可能会将布尔值(如:true 或 false)解析为 0 或 1,并以这种方式对其进行验证。

我的函数只接受数字,无论它们是字符串格式还是整数格式。
<?php
/**
* 检查输入是否仅包含数字(数字)
* @author Tim Boormans <[email protected]>
* @param $digit
* @return bool
*/
function is_digit($digit) {
if(
is_int($digit)) {
return
true;
} elseif(
is_string($digit)) {
return
ctype_digit($digit);
} else {
// 布尔值、浮点数和其他
return false;
}
}
?>
smicheal2 at gmail dot com
8 年前
请注意,ctype_digit() 对诸如 '00001' 之类的字符串会返回 true,这些字符串在技术上并非整数的有效表示,而对诸如 '-1' 之类的字符串会返回 false。它基本上是 /^\d+$/ 正则表达式的更快版本。顾名思义,它回答了“此字符串是否仅包含数字”这个问题。它没有回答“这是否为整数的有效表示”。如果您需要这样做,请使用 is_int(filter_var($val, FILTER_VALIDATE_INT))。
Peter de Pijd
15 年前
请注意,空字符串也为 false
ctype_digit("") // false
error17191 at gmail dot com
8 年前
我只是想澄清“info at directwebsolutions dot nl” 建议的 is_digit() 函数中的一个缺陷。
在负整数的情况下它返回 true,而在包含负整数的字符串的情况下它返回 false。
示例
is_digit(-10); // 返回 ture
is_digit('-10'); // 返回 false
rlerne at gmail dot com
11 年前
有趣的是,您必须将字符串传递给此函数,其他值不会被类型转换(我以为它会,尽管上面明确说字符串 $text)。

例如

<?PHP
$val
= 42; // 生命的答案
$x = ctype_digit($val);
?>

将返回 false,即使类型转换为字符串,它也会返回 true。

<?PHP
$val
= '42';
$x = ctype_digit($val);
?>

返回 True。

也可以这样做

<?PHP
$val
= 42;
$x = ctype_digit((string) $val);
?>

它也会返回真,因为它应该这样做。
strrev xc tod noxeh ta ellij
14年前
ctype_digit() 会将所有传递的低于 256 的整数视为字符代码。对于 48 到 57(ASCII '0'-'9')它返回真,对于其余的返回假。

ctype_digit(5) -> false
ctype_digit(48) -> true
ctype_digit(255) -> false
ctype_digit(256) -> true

(注意:PHP 类型必须是 int;如果传递字符串,它将按预期工作)
a_p_leeming at hotmail dot com
15 年前
另外请注意

<?php ctype_digit("-1"); //false ?>
mdsky at web dot de
14年前
is_numeric 通过例如 1e3 或 0xf5 也返回真。因此它与 ctype_digit 不同,ctype_digit 只在输入 0 到 9 的值时返回真。
John Saman
14年前
使用 is_numeric 函数比 ctype_digit 快得多。

is_numeric 在一百万次运行中耗时 0.237 秒,而 ctype_digit 耗时 0.470 秒。
Skippy
12 年前
如果你需要检查整数而不是仅仅是数字,你可以提供自己的函数,例如这样

<?php
function ctype_int($text)
{
return
preg_match('/^-?[0-9]+$/', (string)$text) ? true : false;
}
?>
zorrosNOSPAMwordsman at NOSPAM dot gmail dot com
8 年前
如果你想验证一个变量是否只包含数字,你可以将其类型转换为字符串,然后转换回 int,看看结果是否相同。像这样

<?php

// 如果只有数字,则 (bool) TRUE,否则为 FALSE
$isOnlyDigits = (string) (int) $input === (string) $input;

?>

我没有对它进行基准测试,但我猜它比正则表达式快得多。
raul dot 3k at gmail dot com
15 年前
ctype_digit 可以以简单的方式用来验证字段
<?php
$field
= $_POST["field"];
if(!
ctype_digit($field)){
echo
"It's not a digit";
}
?>

注意
数字是 0-9
brcontainer at yahoo dot com dot br
5年前
ctype_digit 不支持字符串中的负值

<?php
var_dump
( ctype_digit('-10') ); //return bool(false)
?>

改进(并简化)了 Tim Boormans 的代码

<?php
/**
* 检查输入中是否存在只有数字(数字)
* @author Guilherme Nascimento <[email protected]>
* @param $digit
* @return bool
*/
function is_digit($digit)
{
return
preg_match('#^-?\d+$#', $digit) && is_int((int) $digit);
}
divinity76 at gmail dot com
3年前
如果你想检查它是否是一个有效的整数,这是一个备选方法

<?php
if(false!==filter_var($v, FILTER_VALIDATE_INT)){
// 它是一个有效的 int!
$v=(int)$v;
}else{
// 它不是一个有效的 int
}
?>

或者如果你想检查它是否是一个正整数(>= 0)
<?php
if(false!==filter_var($v, FILTER_VALIDATE_INT, ["options"=>["min_range"=>0]])){
// 它是一个有效的正整数!
$v = (int)$v;
}else{
// 它不是一个有效的正整数
}

?>
To Top