長さで数値を検証しようとしています。この番号は、検証に合格するために 4 桁である必要があります。問題は、0035 のように、この数字の左に 0 がある場合です。
今、私はこれにいます:
echo (strlen ((string) 0025 ));
合計は 2 ですが、残りの 0 をカウントしたいので、合計は 4 になります。明らかに、整数から文字列へのキャストが機能していません。どうすればよいですか?
長さで数値を検証しようとしています。この番号は、検証に合格するために 4 桁である必要があります。問題は、0035 のように、この数字の左に 0 がある場合です。
今、私はこれにいます:
echo (strlen ((string) 0025 ));
合計は 2 ですが、残りの 0 をカウントしたいので、合計は 4 になります。明らかに、整数から文字列へのキャストが機能していません。どうすればよいですか?
そのようにすることはできません。左のゼロは、数値が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
それはうまくいくはずです:
$str = "0025";
if( is_numeric($str) && strlen($str) == 4)
{
echo "pass";
}
文字列ではなく数字の場合、数字には数字がありません。価値があります。その値を、左に 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');
}