0

整数と浮動小数点の両方の検証をチェックしています。preg('/^[0-9]+(.[0-9]+)?$/',$str) これは正常に動作します 12,12.05 しかし、.12 では動作しません

助言がありますか?

前もってありがとう、クマール。

4

6 に答える 6

5

それを作る

preg('/^[0-9]*(\.[0-9]+)?$/',$str)

+要素が 1 回以上繰り返されることを*意味し、0 回以上繰り返されることを意味します。

于 2012-08-23T09:46:08.633 に答える
1

is_floatis_intの組み合わせを使用できます

ただし、どちらもis_numericでほとんどカバーされています

<?php
$tests = array(
    "42", 
    1337, 
    "1e4", 
    "not numeric", 
    array(), 
    9.1
);

foreach ($tests as $element) {
    if (is_numeric($element)) {
        echo "'{$element}' is numeric", PHP_EOL;
    } else {
        echo "'{$element}' is NOT numeric", PHP_EOL;
    }
}
?>

出力:

'42' is numeric
'1337' is numeric
'1e4' is numeric
'not numeric' is NOT numeric
'Array' is NOT numeric
'9.1' is numeric

フロートの例:

<?php
if (is_float(27.25)) {
    echo "is float\n";
} else {
    echo "is not float\n";
}
var_dump(is_float('abc'));
var_dump(is_float(23));
var_dump(is_float(23.5));
var_dump(is_float(1e7));  //Scientific Notation
var_dump(is_float(true));
?>
is float
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)

および Is_int の例:

<?php
if (is_int(23)) {
    echo "is integer\n";
} else {
    echo "is not an integer\n";
}
var_dump(is_int(23));
var_dump(is_int("23"));
var_dump(is_int(23.5));
var_dump(is_int(true));
?>
is integer
bool(true)
bool(false)
bool(false)
bool(false)
于 2012-08-23T09:46:32.690 に答える
0

はい、これを試してください:

if((int) $str != $str)
{
    //error
}

if((float) $str != $str)
{
    //error
}

これでうまくいくはずで、正規表現よりも速く動作すると思います。さらに、その後確認できます(float) $str <= 0->別のエラーなど。

より複雑な検証には正規表現に賭けます。標準ルーチンでは、電子メールの検証、マスク (パターン) 入力などのコードのチャンクを作成する必要があります。

于 2012-08-23T09:46:07.623 に答える
0
<?php
$regex = '~^(\d+)|(\d+)?\.(\d+)$~';
$input = array( '12', '12.05', '.12' );

foreach( $input as $string ) {
    echo "Match " . ( preg_match( $regex, $string ) !== 0 ? "OK" : "NOT OK" ) . "\n";
}
于 2012-08-23T09:47:37.247 に答える
0

PHP のis_floatおよびis_int関数を使用して数値を検証できます。

于 2012-08-23T09:48:04.497 に答える