2

指定された文字列が有効な型の数ではない場合はFALSEを返し、それ以外の場合はTRUEを返す関数を作成するにはどうすればよいですか。

これは他の言語では簡単です。

intval()、isint()、およびis_numeric()は適切ではありません。理由は、次のとおりです。

is_numeric()は、整数だけでなく任意の数値に一致するため適切ではありません。また、整数ではない巨大な数値を数値として受け入れます。intval()は、「9000000000000000」などの無効なPHP整数と有効なPHP整数「0」または「0x0」または「0000」などの両方に対して0を返すため、適切ではありません。isint()は、変数がすでにint型であるかどうかのみをテストします。 、文字列やintへの変換は処理しません。

たぶん、これか何かのための人気のある図書館がありますか?

たとえば、誰かが投稿したフォームデータが有効なphp整数であるかどうかを検出できる関数を呼び出したいと思います。

これを行う関数is_php_integer($ str_test_input)を呼び出したいと思います。関数には何が入りますか?

<?php

$strInput = 'test' //function should return FALSE
$strInput = '' //function should return FALSE
$strInput = '9000000000000000'  //function should return FALSE since
                            //is not valid int in php
$strInput = '9000' //function should return TRUE since
                    //valid integer in php
$strInput = '-9000' // function should return TRUE
$strInput = '0x1A' // function should return TRUE
                    // since 0x1A = 26, a valid integer in php
$strInput = '0' // function should return TRUE, since
                    // 0 is a valid integer in php
$strInput = '0x0' // function should return TRUE, since
                    // 0x0 = 0 which is a valid integer in php
$strInput = '0000' // function should return TRUE, since
                    // 0000 = 0 which is a valid integer in php

function is_php_integer($strTestInput) {
    // what goes here?
    // ...
    // if string could be interpreted as php integer, return true
    // else, return false
}

if is_php_integer($strInput) {
    echo 'your integer plus one equals: '. (intval($strInput) + 1);
} else {
    echo 'your input string is not a valid php integer'
}

?>

前もって感謝します!

4

3 に答える 3

3
<?php

$input = array(
    'test',
    '',
    '9000000000000000',
    '9000',
    '-9000',
    '0x1A',
    '0',
    '0x0',
    '0000'
);

function is_php_integer($strTestInput) {
    return filter_var( $strTestInput, FILTER_VALIDATE_INT, array('flags' => FILTER_FLAG_ALLOW_OCTAL | FILTER_FLAG_ALLOW_HEX));

}

foreach ( $input as $value ) {
    if (is_php_integer($value) !== FALSE) {
        echo 'your integer plus one equals: '. (intval( $value ) + 1) . PHP_EOL;
    } else {
        echo 'your input string is not a valid php integer' . PHP_EOL;
    }
}
于 2013-01-21T22:22:54.950 に答える
2

filter_varを使用できます。FILTER_FLAG_ALLOW_HEXフラグはとに必要であり0x1A0x0FILTER_FLAG_ALLOW_OCTAL必要です0000

function is_php_integer($strInput) {
    return filter_var(
        $strInput, FILTER_VALIDATE_INT,
        FILTER_FLAG_ALLOW_OCTAL | FILTER_FLAG_ALLOW_HEX
    ) !== false;
}
于 2013-01-21T22:30:47.457 に答える
1
function is_php_integer($strInput) {
    return false !== filter_var($strInput, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
}

また、filter_inputフォームデータを直接フィルタリングすることを検討してください。

于 2013-01-21T22:24:27.583 に答える