1

我试图通过它的长度来验证一个数字。此号码必须有 4 位数字才能通过验证。问题是当这个数字左边有 0 时,比如 0035。

现在我在这个:

echo (strlen ((string) 0025  ));

总共有 2 个,但我希望它计算左边的 0,所以它总共有 4 个。显然,将整数转换为字符串不起作用,我该怎么做?

4

3 回答 3

6

你不能那样做,左零表示数字是八进制而不是十进制,你可以使用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>";
}

现场测试:http ://codepad.viper-7.com/BTRTgR

于 2012-12-14T11:31:12.703 回答
3

那应该工作:

$str = "0025";
if( is_numeric($str) && strlen($str) == 4)
{
    echo "pass";
}
于 2012-12-14T11:31:52.893 回答
1

如果是数字,而不是字符串,则数字没有数字。它有一个价值。您可以将该值格式化为一个用 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');
}
于 2012-12-14T11:48:06.080 回答