1

長さで数値を検証しようとしています。この番号は、検証に合格するために 4 桁である必要があります。問題は、0035 のように、この数字の左に 0 がある場合です。

今、私はこれにいます:

echo (strlen ((string) 0025  ));

合計は 2 ですが、残りの 0 をカウントしたいので、合計は 4 になります。明らかに、整数から文字列へのキャストが機能していません。どうすればよいですか?

4

3 に答える 3

6

そのようにすることはできません。左のゼロは、数値が10 進数ではなく 8 進数であることを意味します。それにはsprintf()を使用できます。

例:

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

ライブ テスト: http://codepad.viper-7.com/VQr7Xz

コメント回答:

数字に 0 を追加したくありません。数字に 0 があるかどうかを検出したいのです。受け取った数字が 25 の場合、それは有効な数字ではありません。0025 であれば有効です。私が欲しいのは、4桁の数字のみを検証することです。– クラウディオ・リベイロ

クラウディオ、数字には無限の左ゼロがあります。ユーザーは 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

于 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 に答える