我试图通过它的长度来验证一个数字。此号码必须有 4 位数字才能通过验证。问题是当这个数字左边有 0 时,比如 0035。
现在我在这个:
echo (strlen ((string) 0025 ));
总共有 2 个,但我希望它计算左边的 0,所以它总共有 4 个。显然,将整数转换为字符串不起作用,我该怎么做?
我试图通过它的长度来验证一个数字。此号码必须有 4 位数字才能通过验证。问题是当这个数字左边有 0 时,比如 0035。
现在我在这个:
echo (strlen ((string) 0025 ));
总共有 2 个,但我希望它计算左边的 0,所以它总共有 4 个。显然,将整数转换为字符串不起作用,我该怎么做?
你不能那样做,左零表示数字是八进制而不是十进制,你可以使用sprintf()来做到这一点。
例子:
echo strlen(sprintf("%04d", 25));
现场测试: http ://codepad.viper-7.com/VQr7Xz
我不想将 0 添加到数字中,我想检测数字是否有 0。如果收到的号码是 25,则它不是有效号码。如果是 0025 则有效。我想要的是仅验证 4 位数字。——克劳迪奥·里贝罗
Cláudio,数字有无限的左零,虽然用户明确输入了 2 或 3 个左零,但还有更多隐藏的左零,这是一个数学基础,这就是为什么如果你收到一个,就不可能知道用户输入了多少左零integer
多变的。如果变量具有恒定大小并且您想知道它有多少个左零,您可以这样做:
<?php
$int = 25;
echo 4 - strlen($int);
现场测试:http ://codepad.viper-7.com/fT2jSn
但是,如果您的变量具有可变长度,则它必须是string
类型而不是numeric
类型。
收到的变量是 a 的示例string
:
<?php
$strs = array("0025","000035","01","2");
foreach($strs as $str)
{
preg_match("/^0+/", $str, $matches);
echo strlen(@$matches[0]);
echo "<br>";
}
那应该工作:
$str = "0025";
if( is_numeric($str) && strlen($str) == 4)
{
echo "pass";
}
如果是数字,而不是字符串,则数字没有数字。它有一个价值。您可以将该值格式化为一个用 0 填充的 4 位数字的字符串。但是验证一个数字是否有 4 位数字是无稽之谈,因为数字值没有格式。当您将其格式化为以 10 为底的数字时,该值仅变为“4 位”。在那之前,该值是一个可以用多种基数表示的值,并且在所有基数中都有不同数量的“数字”。
您要么想将数字格式化为 0 填充的 4 位字符串,要么您想检查该值是否在 0 和 9999 之间(或者如果它必须恰好是“4 位”,则为 1000 和 9999)。
if (0 <= $num && $num <= 9999) {
$numStr = sprintf('%04d', $num);
} else {
trigger_error('Number out of range');
}