沉思-騰訊 PHP 面試題請寫一個函式來檢查使用者提交的資料是否為整數(不區分資料型別,可以為二進位制、八進位制、十進位制、十六進位制數字)

anjing發表於2018-04-24

百度了一下騰訊的PHP面試題其中一個
寫一個函式來檢查使用者提交的資料是否為整數
我第一反應 哇好簡單
但是看到 (不區分資料型別,可以為二進位制、八進位制、十進位制、十六進位制數字)
咦?有區別麼?----經測試後沒啥區別 已測試C和PHP 統統到底層全轉為十進位制。

方案1---過濾器filter

function checkInt($input)
{
    //var_dump($input);
    if ($input === 0) echo '是';
        else if( filter_var($input, FILTER_VALIDATE_INT)  &&  !is_string($input))
                    echo  '是'. "</br>";
             else
                    echo  '不是'. "</br>";

}

方案2 ---is_int or is_numeric

function checkInt($input)
{
    //var_dump($input);
    if(is_int($input)  && !is_string($input))
        echo '是'. "</br>";
    else
        echo '不是'. "</br>";

}

方案3---正則

function checkInt($input)
{
    var_dump($input);

    if ($input === 0) echo '是';
        else if( preg_match('/^-?\\d+$/',$input) && !is_string($input))
                    echo  '是';
             else
                    echo  '不是';

}
$input = 101.00;//浮點
checkInt($input);
$input =-101;//負整數
checkInt($input);
$input = 0b101;//二進位制
checkInt($input);
$input = 0101;//八進位制
checkInt($input);
$input = 0x101;//十六進位制
checkInt($input);
$input = "123bdc";//帶數字開頭字串
checkInt($input);
$input = "a1dcq1";//非數字開頭字串
checkInt($input);
echo is_numeric( "112312312123" ) ?'正整數':'不是正整數';

歡迎小夥伴們補充

那麼問題來了
1 在測試的時候用了
xdebug PHP 7.2.2 (cli) (built: Jan 31 2018 19:31:17) ( ZTS MSVC15 (Visual C++ 2017) x64 )

<?php
$a = 1;
xdebug_debug_zval('a');
echo PHP_EOL;
$b = $a;
xdebug_debug_zval('a');
echo PHP_EOL;

file
refcount 應該是 1和2啊
2 二進位制、八進位制、十進位制、十六進位制數字 怎麼在低層變成了十進位制(之前沒試過傳10進位制以外的,今天傳非10進位制的才發現)

相關文章