функции isHex () и isOcta()

у меня есть две функции. IsOcta и isHex. Не может заставить isHex работать должным образом.
Проблема в isHex () заключается в том, что он не может опустить обозначение " x " исходной строки x23.

первоначально srting наговора может также быть D1CE. Поэтому добавление x, а затем сравнение не будет делать.

есть ли правильное решение для функции isHex. Также isocta правильно?

function isHex($string){
    (int) $x=hexdec("$string");     // Input must be a String and hexdec returns NUMBER
    $y=dechex($x);          // Must be a Number and dechex returns STRING
    echo "<br />isHex() - Hexa Number Reconverted: ".$y;       

    if($string==$y){
        echo "<br /> Result: Hexa ";
    }else{
        echo "<br /> Result: NOT Hexa";
    }   
    }


function IsOcta($string){
    (int) $x=octdec("$string");     // Input must be a String and octdec returns NUMBER
          $y=decoct($x);            // Must be a Number and decoct returns STRING
    echo "<br />IsOcta() - Octal Number Reconverted: ".$y;          

    if($string==$y){
    echo "<br /> Result: OCTAL";
    }else{
    echo "<br /> Result: NOT OCTAL";
    }

} 

здесь вызов функций:

$hex    =   "x23";      // STRING 
$octa   =   "023";  // STRING 
echo "<br /    Original HEX = $hex | Original Octa = $octa <br /    ";

echo isHex($hex)."<br /    ";   
echo IsOcta($octa);

вот результат вызова функции:

Original HEX = x23 | Original Octa = 023 

isHex() - Hexa Number Reconverted: 23
Result: NOT Hexa

IsOcta() - Octal Number Reconverted: 23
Result: OCTAL

=== = = = ПОЛНЫЙ ОТВЕТ ====

спасибо Layke для направления к встроенной функции, которая проверяет, присутствуют ли шестнадцатеричные символы в строке или нет. Также Спасибо Марио за подсказку использовать ltrim. Обе функции были необходимы, чтобы получить isHexa или шестнадцатеричную функцию для построения.

--- ОТРЕДАКТИРОВАННАЯ ФУНКЦИЯ --

// isHEX function

function isHex($strings){

// Does not work as originally suggested by Layke, but thanks for directing to the resource. It does not omit 0x representation of a hexadecimal number. 
/*
foreach ($strings as $testcase) {
     if (ctype_xdigit($testcase)) {
        echo "<br /> $testcase - <strong>TRUE</strong>, Contains only Hex<br />";
    } else {
        echo "<br /> $testcase - False, Is not Hex";

   } 
}
*/

   // This works CORRECTLY
   foreach ($strings as $testcase) {
        if (ctype_xdigit(ltrim($testcase , "0x"))) {
           echo "<br /> $testcase - <strong>TRUE</strong>, Contains only Hex<br />";
       } else {
           echo "<br /> $testcase - False, Is not Hex";

      } 
   }
}

$strings = array('AB10BC99', 'AR1012', 'x23' ,'0x12345678');
isHex($strings); // calling

вероятно, теперь это доказательство дурака ответ на функцию "является шестнадцатеричным"?

3 ответов


isHexadecimal?

PHP имеет встроенные функции для шестнадцатеричных.

см. здесь функция ctype_xdigit: http://uk1.php.net/ctype_xdigit

<?php
$strings = array('AB10BC99', 'AR1012', 'ab12bc99');
foreach ($strings as $testcase) {
    if (ctype_xdigit($testcase)) {
        // TRUE : Contains only Hex
    } else {
        // False : Is not Hex
    }
}

isOctal?

и для выяснения, является ли число восьмеричной, вы можете просто перевернуть и перевернуть.

function isOctal($x) {
    return decoct(octdec($x)) == $x;
}

вы можете очистить вашу входную строку с ltrim() затем. Просто добавьте его перед первым преобразованием:

 $string = ltrim($string, "0x");

удалит оба ведущих нуля (ненужные) и x символы.


isHexadecimal ::=

ctype_xdigit($testString)

isOctal ::=

preg_match('/^[0-7]+$/', $testString);