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

Clá*_*iro 1 php

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

现在我在这:

echo (strlen ((string) 0025  ));
Run Code Online (Sandbox Code Playgroud)

总共给出了2,但是我想要把它计算为左边的0,所以它给了我总共4个.显然整数到字符串的转换不起作用,我怎么能这样做?

Jos*_*ior 6

你不能这样做,左边的零意味着数字是八进制而不是十进制,你可以使用sprintf()来做到这一点.

例:

echo strlen(sprintf("%04d", 25));
Run Code Online (Sandbox Code Playgroud)

实时测试: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);
Run Code Online (Sandbox Code Playgroud)

实时测试: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>";
}
Run Code Online (Sandbox Code Playgroud)

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