PHP - 左侧包含0的数字的长度

时间:2012-12-14 11:27:03

标签: php

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

现在我在这:

echo (strlen ((string) 0025  ));

总共有2个,但是我希望这个数字计算为左边的0,所以它总共给了我4个。 很明显,整数到字符串的强制转换不起作用,我该怎么做?

3 个答案:

答案 0 :(得分:6)

你不能这样做,左边的零表示数字是octal and not decimal,你可以使用sprintf()来做到这一点。

示例:

echo strlen(sprintf("%04d", 25));

实时测试: http://codepad.viper-7.com/VQr7Xz

评论答案:

  

我不想将0添加到数字,我想检测是否   数字有0。如果收到的号码是25,则不是有效号码。   如果是0025则有效。我想要的只是验证数字   有4位数。 - CláudioRibeiro

Cláudio,数字有无限左零,虽然用户明确键入2或3左零,但是有更多隐藏的左零,这是一个数学基础,这就是为什么不可能知道用户键入了多少左零您收到一个integer变量。如果变量具有恒定的大小,并且您想知道它有多少左零,则可以执行此操作:

<?php
$int = 25;

echo  4 - strlen($int);

实时测试:http://codepad.viper-7.com/fT2jSn

但如果变量的长度可变,则必须是string类型而不是numeric类型。

收到的变量是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

答案 1 :(得分:3)

这应该有效:

$str = "0025";
if( is_numeric($str) && strlen($str) == 4)
{
    echo "pass";
}

答案 2 :(得分:1)

如果是,而不是字符串,则该号码没有数字。它有。您可以将该值格式化为一个包含4位数的字符串,并用0填充。但验证数字是否有4位数是无稽之谈,因为数字没有格式。将其格式化为基数为10时,该值仅变为“4位数”。在此之前,该值是一个值,可以用多个基数表示,并且在所有基数中都有不同数量的“数字”。

您要么将数字格式化为0填充的4位数字符串,要么检查该值是否介于0和9999之间(如果必须精确为“4位数”,则检查1000和9999)。 / p>

if (0 <= $num && $num <= 9999) {
    $numStr = sprintf('%04d', $num);
} else {
    trigger_error('Number out of range');
}