我正在尝试按照它的长度验证一个数字。此号码必须有4位数字才能通过验证。问题是这个数字的左边是0,比如0035。
现在我在这:
echo (strlen ((string) 0025 ));
总共有2个,但是我希望这个数字计算为左边的0,所以它总共给了我4个。 很明显,整数到字符串的强制转换不起作用,我该怎么做?
答案 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>";
}
答案 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');
}