0

データベースからの文字列値があります。
この値が整数か文字列かを確認する必要があります。と
を試しましたが、どちらも必要なものではありません。 is_intis_numeric

is_int値が文字列型の場合は常に false をis_numeric返し、値に数値が含まれている場合は true を返します。

私が使用しているのはpreg_match('/^\d+$/',$value)で、この場合の簡単な解決策を探しています。

4

3 に答える 3

8
$stringIsAnInteger = ctype_digit($string);

ctyped_digit()

于 2013-01-14T08:48:56.670 に答える
1

私はあなたの方法が最良のものを見つけます。
単純な正規表現では複雑なものは何も見当たらないので、あなたの代わりに、これ以上単純なものを探すことはありません。

複雑さについて言えば、発信者コードだけに限定しないでください。
1回の関数呼び出しと同じくらい短い場合があります。しかし、基礎となるコードについては確信が持てません。これは非常に複雑であり、重要なことですが、ここで指定されているすべての関数と同様に、いくつかの問題があります。

独自のソリューションはシンプルで堅牢です。

更新:
「単純な文字列関数をパフォーマンスに使用できる正規表現を使用しないでください」というすべての発言は、前世紀から直接のものです。

  • 「文字列関数がどれも自分に合っていなくても、正規表現を使用しないでください」という意味ではありません。
  • 現時点ではXXIであり、特にテキストの解析などの簡単な問題では、コンピューターは非常に高速です。このような単純な正規表現がアプリケーションのボトルネックになることはありません。したがって、パフォーマンスの最適化の観点から、正規表現よりも文字列関数を好む理由は1つではありません。実際のアプリでは、違いに気付く(または測定する)ことは決してありません。
于 2013-01-14T09:11:23.043 に答える
1

使用できますctype_digit()— 数字をチェックします。指定された文字列 text のすべての文字が数値かどうかを確認します。

例 1

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>

上記は出力されます

The string 1820.20 does not consist of all digits.
The string 10002 consists of all digits.
The string wsl!12 does not consist of all digits.

例 2

<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>
于 2013-01-14T08:53:48.830 に答える