1

私のコード:

次のコードを試しました

<SCRIPT type="text/javascript"> 

var num = "10";
var expRegex = /^\d+$/;

if(expRegex.test(num)) 
{
   alert('Integer');
}
else
{
   alert('Not an Integer');
}

</SCRIPT>

として結果を得ていIntegerます。実際には、num変数を二重引用符で宣言しました。とみなされることは明らかであるstring。実際には、結果を として取得する必要がありますNot an IntegerRegEx期待どおりの結果が得られるように変更する方法。

この場合、結果は として返されNot an Integerます。しかし、私はInteger.

4

3 に答える 3

5
if(typeof num === "number" &&
   Math.floor(num) === num)
    alert('Integer');
else
    alert('Not an Integer');

正規表現は、文字列で機能するためにあります。そのため、文字列以外で試してみると、文字列が変換されるか、エラーが発生します。そして、明らかに文字列には数字のみが含まれているため、trueが返されます(これがチェック対象です)。

typeof代わりに演算子を使用してください。intしかし、JavaScript には と の専用の型がありませんfloat。したがって、整数チェックを自分で行う必要があります。値floorが変わらない場合は、整数になります。

もう1つ注意点があります。Infinityであり、numberそれを呼び出すとMath.floor()再度発生するInfinityため、そこで誤検知が発生します。次のように変更できます。

if(typeof num === "number" &&
   isFinite(num) &&
   Math.floor(num) === num)
    ...

正規表現を見ると、正の整数のみを受け入れたい場合があります。

if(typeof num === "number" &&
   isFinite(num) &&
   Math.floor(Math.abs(num)) === num)
    ...
于 2012-12-07T14:35:38.057 に答える
2

RegExp は文字列用です。確認することはできtypeof num == 'number'ますが、フロートなどについて複数のチェックを実行する必要があります。また、小さなビット単位の演算子を使用して整数を確認することもできます。

function isInt(num) {
    num = Math.abs(num); // if you want to allow negative (thx buettner)
    return num >>> 0 == num;
}

isInt(10.1) // false
isInt("10") // false
isInt(10)   // true
于 2012-12-07T14:46:20.857 に答える
0

isNaN() の方が使いやすいと思います。

if(!isNaN(num))
{
    alert('Integer !');
}
else
{
    alert('Not an Integer !');
}

レオン

于 2012-12-07T14:39:05.027 に答える