質問

何が最も効果的な方法を検証す十進数にJavaScript?

ボーナスポイント:

  1. 透明度液清潔でシンプルです。
  2. クロスプラットフォーム.

試験例:

01. IsNumeric('-1')      => true
02. IsNumeric('-1.5')    => true
03. IsNumeric('0')       => true
04. IsNumeric('0.42')    => true
05. IsNumeric('.42')     => true
06. IsNumeric('99,999')  => false
07. IsNumeric('0x89f')   => false
08. IsNumeric('#abcdef') => false
09. IsNumeric('1.2.3')   => false
10. IsNumeric('')        => false
11. IsNumeric('blah')    => false
役に立ちましたか?

解決

@ジョエルの応答 は狭いですが、まずは、以下の場合:

// Whitespace strings:
IsNumeric(' ')    == true;
IsNumeric('\t\t') == true;
IsNumeric('\n\r') == true;

// Number literals:
IsNumeric(-1)  == false;
IsNumeric(0)   == false;
IsNumeric(1.1) == false;
IsNumeric(8e5) == false;

一時間前からあったかを IsNumeric 機能する場合変数が含まれる数値を に関わらず、そのタイプ, でき String を含む数値(また考えても値は指数表現等)、 a Number オブジェクトはほとんど何でもできることにより機能のない他の種類の仮定の下、型強制すか? +true == 1;true なし "numeric").

私はこのセット +30のユニットテスト さらに機能の実装もありますのすべての私試験:

function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

P.S. isNaN & isFinite て混乱の振る舞いにより強制転換しています。にES6, ます。isNaN & ます。isFinite が修正されます。いることに留意しつつ、利用します。


更新 : こちらはどのようjQueryなし(2.2-安定):

isNumeric: function(obj) {
    var realStringObj = obj && obj.toString();
    return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;
}

更新 : 角4.3:

export function isNumeric(value: any): boolean {
    return !isNaN(value - parseFloat(value));
}

他のヒント

Arrrgh!なに耳を傾けた正規表現に応答となります。RegExはヴたこと、伝える事が出来るって事だけます。に対応してくれ微妙に調整できたり、スポットミスにお正規表現で指定する。

場合には使用できません isNaN(), このすべり

function IsNumeric(input)
{
    return (input - 0) == input && (''+input).trim().length > 0;
}

この作品:

(input - 0) 表現力JavaScriptいタイプの強制御入力値;いずれにしても、多数の差分動作します。この変換に失敗したり、表現、結果と NaN.この 数値 結果は元の値に渡されます。以来、左手側には数字、型強制は再使用します。現在の入力両面からた惹同じ種類、同じ値を使ってくださいというふうに思っても常に同じ(常にtrueです。しかしながらルールという NaN いに等しい NaN, ない値にできないのだける価値に変換されません番号)にfalseになります。

のチェックの長さは特別な場合を伴う空の文字列です。また、滝の下にお0x89f試験が、これは多くの環境にいえ方を定義する数値リテラルです。いう特定のシナリオとして追加できる追加のチェック。でも、その理由を使用しない isNaN() それだけあなたを包み込む独自の機能を有す isNaN() でも、追加のチェック。

要約 を知りたい場合は値に変換することができる。番号、実際に試しに変換します。


フェスティバルふくおかん研究のための なぜ 空白文字の文字列ではな予想出力と考えます:空の文字列が惹る 0NaN.単なるトリミングの前に文字列の長さチェックを取扱います。

走行単体テスト(ユニットテストに対する新しいコードでは失敗し、無限およびboolean型のリテラルのみの時にすべき問題であれば生成コードも、タイプ文字通り、チェックの場合は数値?すべ もののうち、一不思議なコードを生成する際に使われます。

ただしこの場合にも, 理由はただそれだけを利用すれば何らかの理由でなisNaN().

このようにそうなもの:

function IsNumeric(input){
    var RE = /^-{0,1}\d*\.{0,1}\d+$/;
    return (RE.test(input));
}

を試験す:

// alert(TestIsNumeric());

function TestIsNumeric(){
    var results = ''
    results += (IsNumeric('-1')?"Pass":"Fail") + ": IsNumeric('-1') => true\n";
    results += (IsNumeric('-1.5')?"Pass":"Fail") + ": IsNumeric('-1.5') => true\n";
    results += (IsNumeric('0')?"Pass":"Fail") + ": IsNumeric('0') => true\n";
    results += (IsNumeric('0.42')?"Pass":"Fail") + ": IsNumeric('0.42') => true\n";
    results += (IsNumeric('.42')?"Pass":"Fail") + ": IsNumeric('.42') => true\n";
    results += (!IsNumeric('99,999')?"Pass":"Fail") + ": IsNumeric('99,999') => false\n";
    results += (!IsNumeric('0x89f')?"Pass":"Fail") + ": IsNumeric('0x89f') => false\n";
    results += (!IsNumeric('#abcdef')?"Pass":"Fail") + ": IsNumeric('#abcdef') => false\n";
    results += (!IsNumeric('1.2.3')?"Pass":"Fail") + ": IsNumeric('1.2.3') => false\n";
    results += (!IsNumeric('')?"Pass":"Fail") + ": IsNumeric('') => false\n";
    results += (!IsNumeric('blah')?"Pass":"Fail") + ": IsNumeric('blah') => false\n";

    return results;
}

私は借りることからregex http://www.codetoad.com/javascript/isnumeric.asp.説明:

/^ match beginning of string
-{0,1} optional negative sign
\d* optional digits
\.{0,1} optional decimal point
\d+ at least one digit
$/ match end of string

Yahoo!UI この:

isNumber: function(o) {
    return typeof o === 'number' && isFinite(o);
}
function IsNumeric(num) {
     return (num >=0 || num < 0);
}

この作品0x23タイプの番号です。

の受け答えに失敗したテスト#7思うのですが変更が頭をよぎると思います。この受け答えは、私た。

中プロジェクトしていま必要な検証データとして特定できるのではjavascriptの数値を使用できる処理が必要とされていました。

jQuery、その他のjavascriptライブラリも含まれておりまような機能を、通常という isNumeric.もあり ポストstackoverflow して広く受け容れられているが、その答えは同一の一般的なルーチンは、前述の図書館利用しています。

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

まず、上記のコードがtrueを返す場合には引数が配列の長さ1は、単一の要素の一種とみなすべき数値の論理です。私の意見であれば、その配列そのな数値配列となる。

を解消する問題、あるいは新する"ボタンをクリックすると割引が配列の論理

function isNumber(n) {
  return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n);
}

もちろん、このまま使用 Array.isArray, jquery $.isArray プロトタイプ Object.isArray の代わりに Object.prototype.toString.call(n) !== '[object Array]'

私た負の十六進数の整数リテラル文字列("-0xA"->-10ていないとられていない数値として.しかし、十六進数の整数リテラル文字列("0xA"->10)として計上することとし、数値配列となる。いものを有効な数値配列となる。

その後、変更のが、"ロジカル(論理的)であること。

function isNumber(n) {
  return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}

てについて悩んでいるの創出、regexの関数が呼び出されることができ書き換えで、このようになっ

var isNumber = (function () {
  var rx = /^-/;

  return function (n) {
      return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(rx, ''));
  };
}());

しましたCMSs +30試験例 クローニングの 試験jsfiddle 追加マイエクストラテストケース、自記記載の溶液とする。

なに広く受け入れられ適用されるようにしてくれます。答えるものですが、万が一これがよりどのように期待して結果からisNumeric機能そしてこれるのです。

編集: 指摘しているように Bergi, あることができるオブジェクトを考えられる数値としたほうが良いと思われますwhitelistよりブラックリストに登録する。この意思を基準とします。

の気持ちを抱いて欲しいと思いisNumeric機能を考えるだけ数字や文字列

こうしたほうが良いと思われます使用

function isNumber(n) {
  return (Object.prototype.toString.call(n) === '[object Number]' || Object.prototype.toString.call(n) === '[object String]') &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}

試験の解

var testHelper = function() {

  var testSuite = function() {
    test("Integer Literals", function() {
      ok(isNumber("-10"), "Negative integer string");
      ok(isNumber("0"), "Zero string");
      ok(isNumber("5"), "Positive integer string");
      ok(isNumber(-16), "Negative integer number");
      ok(isNumber(0), "Zero integer number");
      ok(isNumber(32), "Positive integer number");
      ok(isNumber("040"), "Octal integer literal string");
      ok(isNumber(0144), "Octal integer literal");
      ok(isNumber("-040"), "Negative Octal integer literal string");
      ok(isNumber(-0144), "Negative Octal integer literal");
      ok(isNumber("0xFF"), "Hexadecimal integer literal string");
      ok(isNumber(0xFFF), "Hexadecimal integer literal");
      ok(isNumber("-0xFF"), "Negative Hexadecimal integer literal string");
      ok(isNumber(-0xFFF), "Negative Hexadecimal integer literal");
    });

    test("Foating-Point Literals", function() {
      ok(isNumber("-1.6"), "Negative floating point string");
      ok(isNumber("4.536"), "Positive floating point string");
      ok(isNumber(-2.6), "Negative floating point number");
      ok(isNumber(3.1415), "Positive floating point number");
      ok(isNumber(8e5), "Exponential notation");
      ok(isNumber("123e-2"), "Exponential notation string");
    });

    test("Non-Numeric values", function() {
      equals(isNumber(""), false, "Empty string");
      equals(isNumber("        "), false, "Whitespace characters string");
      equals(isNumber("\t\t"), false, "Tab characters string");
      equals(isNumber("abcdefghijklm1234567890"), false, "Alphanumeric character string");
      equals(isNumber("xabcdefx"), false, "Non-numeric character string");
      equals(isNumber(true), false, "Boolean true literal");
      equals(isNumber(false), false, "Boolean false literal");
      equals(isNumber("bcfed5.2"), false, "Number with preceding non-numeric characters");
      equals(isNumber("7.2acdgs"), false, "Number with trailling non-numeric characters");
      equals(isNumber(undefined), false, "Undefined value");
      equals(isNumber(null), false, "Null value");
      equals(isNumber(NaN), false, "NaN value");
      equals(isNumber(Infinity), false, "Infinity primitive");
      equals(isNumber(Number.POSITIVE_INFINITY), false, "Positive Infinity");
      equals(isNumber(Number.NEGATIVE_INFINITY), false, "Negative Infinity");
      equals(isNumber(new Date(2009, 1, 1)), false, "Date object");
      equals(isNumber(new Object()), false, "Empty object");
      equals(isNumber(function() {}), false, "Instance of a function");
      equals(isNumber([]), false, "Empty Array");
      equals(isNumber(["-10"]), false, "Array Negative integer string");
      equals(isNumber(["0"]), false, "Array Zero string");
      equals(isNumber(["5"]), false, "Array Positive integer string");
      equals(isNumber([-16]), false, "Array Negative integer number");
      equals(isNumber([0]), false, "Array Zero integer number");
      equals(isNumber([32]), false, "Array Positive integer number");
      equals(isNumber(["040"]), false, "Array Octal integer literal string");
      equals(isNumber([0144]), false, "Array Octal integer literal");
      equals(isNumber(["-040"]), false, "Array Negative Octal integer literal string");
      equals(isNumber([-0144]), false, "Array Negative Octal integer literal");
      equals(isNumber(["0xFF"]), false, "Array Hexadecimal integer literal string");
      equals(isNumber([0xFFF]), false, "Array Hexadecimal integer literal");
      equals(isNumber(["-0xFF"]), false, "Array Negative Hexadecimal integer literal string");
      equals(isNumber([-0xFFF]), false, "Array Negative Hexadecimal integer literal");
      equals(isNumber([1, 2]), false, "Array with more than 1 Positive interger number");
      equals(isNumber([-1, -2]), false, "Array with more than 1 Negative interger number");
    });
  }

  var functionsToTest = [

    function(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    },

    function(n) {
      return !isNaN(n) && !isNaN(parseFloat(n));
    },

    function(n) {
      return !isNaN((n));
    },

    function(n) {
      return !isNaN(parseFloat(n));
    },

    function(n) {
      return typeof(n) != "boolean" && !isNaN(n);
    },

    function(n) {
      return parseFloat(n) === Number(n);
    },

    function(n) {
      return parseInt(n) === Number(n);
    },

    function(n) {
      return !isNaN(Number(String(n)));
    },

    function(n) {
      return !isNaN(+('' + n));
    },

    function(n) {
      return (+n) == n;
    },

    function(n) {
      return n && /^-?\d+(\.\d+)?$/.test(n + '');
    },

    function(n) {
      return isFinite(Number(String(n)));
    },

    function(n) {
      return isFinite(String(n));
    },

    function(n) {
      return !isNaN(n) && !isNaN(parseFloat(n)) && isFinite(n);
    },

    function(n) {
      return parseFloat(n) == n;
    },

    function(n) {
      return (n - 0) == n && n.length > 0;
    },

    function(n) {
      return typeof n === 'number' && isFinite(n);
    },

    function(n) {
      return !Array.isArray(n) && !isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
    }

  ];


  // Examines the functionsToTest array, extracts the return statement of each function
  // and fills the toTest select element.
  var fillToTestSelect = function() {
    for (var i = 0; i < functionsToTest.length; i++) {
      var f = functionsToTest[i].toString();
      var option = /[\s\S]*return ([\s\S]*);/.exec(f)[1];
      $("#toTest").append('<option value="' + i + '">' + (i + 1) + '. ' + option + '</option>');
    }
  }

  var performTest = function(functionNumber) {
    reset(); // Reset previous test
    $("#tests").html(""); //Clean test results
    isNumber = functionsToTest[functionNumber]; // Override the isNumber global function with the one to test
    testSuite(); // Run the test

    // Get test results
    var totalFail = 0;
    var totalPass = 0;
    $("b.fail").each(function() {
      totalFail += Number($(this).html());
    });
    $("b.pass").each(function() {
      totalPass += Number($(this).html());
    });
    $("#testresult").html(totalFail + " of " + (totalFail + totalPass) + " test failed.");

    $("#banner").attr("class", "").addClass(totalFail > 0 ? "fail" : "pass");
  }

  return {
    performTest: performTest,
    fillToTestSelect: fillToTestSelect,
    testSuite: testSuite
  };
}();


$(document).ready(function() {
  testHelper.fillToTestSelect();
  testHelper.performTest(0);

  $("#toTest").change(function() {
    testHelper.performTest($(this).children(":selected").val());
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="https://rawgit.com/Xotic750/testrunner-old/master/testrunner.js" type="text/javascript"></script>
<link href="https://rawgit.com/Xotic750/testrunner-old/master/testrunner.css" rel="stylesheet" type="text/css">
<h1>isNumber Test Cases</h1>

<h2 id="banner" class="pass"></h2>

<h2 id="userAgent">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11</h2>

<div id="currentFunction"></div>

<div id="selectFunction">
  <label for="toTest" style="font-weight:bold; font-size:Large;">Select function to test:</label>
  <select id="toTest" name="toTest">
  </select>
</div>

<div id="testCode"></div>

<ol id="tests">
  <li class="pass">
    <strong>Integer Literals <b style="color:black;">(0, 10, 10)</b></strong>

    <ol style="display: none;">
      <li class="pass">Negative integer string</li>

      <li class="pass">Zero string</li>

      <li class="pass">Positive integer string</li>

      <li class="pass">Negative integer number</li>

      <li class="pass">Zero integer number</li>

      <li class="pass">Positive integer number</li>

      <li class="pass">Octal integer literal string</li>

      <li class="pass">Octal integer literal</li>

      <li class="pass">Hexadecimal integer literal string</li>

      <li class="pass">Hexadecimal integer literal</li>
    </ol>
  </li>

  <li class="pass">
    <strong>Foating-Point Literals <b style="color:black;">(0, 6, 6)</b></strong>

    <ol style="display: none;">
      <li class="pass">Negative floating point string</li>

      <li class="pass">Positive floating point string</li>

      <li class="pass">Negative floating point number</li>

      <li class="pass">Positive floating point number</li>

      <li class="pass">Exponential notation</li>

      <li class="pass">Exponential notation string</li>
    </ol>
  </li>

  <li class="pass">
    <strong>Non-Numeric values <b style="color:black;">(0, 18, 18)</b></strong>

    <ol style="display: none;">
      <li class="pass">Empty string: false</li>

      <li class="pass">Whitespace characters string: false</li>

      <li class="pass">Tab characters string: false</li>

      <li class="pass">Alphanumeric character string: false</li>

      <li class="pass">Non-numeric character string: false</li>

      <li class="pass">Boolean true literal: false</li>

      <li class="pass">Boolean false literal: false</li>

      <li class="pass">Number with preceding non-numeric characters: false</li>

      <li class="pass">Number with trailling non-numeric characters: false</li>

      <li class="pass">Undefined value: false</li>

      <li class="pass">Null value: false</li>

      <li class="pass">NaN value: false</li>

      <li class="pass">Infinity primitive: false</li>

      <li class="pass">Positive Infinity: false</li>

      <li class="pass">Negative Infinity: false</li>

      <li class="pass">Date object: false</li>

      <li class="pass">Empty object: false</li>

      <li class="pass">Instance of a function: false</li>
    </ol>
  </li>
</ol>

<div id="main">
  This page contains tests for a set of isNumber functions. To see them, take a look at the source.
</div>

<div>
  <p class="result">Tests completed in 0 milliseconds.
    <br>0 tests of 0 failed.</p>
</div>

ええ、内蔵 isNaN(object) するより早くより正規表現の構文解析で構成ではなく、解釈ができます。

この結果は少し違うんまりとした():

                                              // IS NUMERIC
document.write(!isNaN('-1') + "<br />");      // true
document.write(!isNaN('-1.5') + "<br />");    // true
document.write(!isNaN('0') + "<br />");       // true
document.write(!isNaN('0.42') + "<br />");    // true
document.write(!isNaN('.42') + "<br />");     // true
document.write(!isNaN('99,999') + "<br />");  // false
document.write(!isNaN('0x89f') + "<br />");   // true
document.write(!isNaN('#abcdef') + "<br />"); // false
document.write(!isNaN('1.2.3') + "<br />");   // false
document.write(!isNaN('') + "<br />");        // true
document.write(!isNaN('blah') + "<br />");    // false

その機能を利用す isNaN.と思い場合は試験のための !isNaN(yourstringhere) で動作しれます。

以来、jQuery1.7を使用でき jQuery.isNumeric():

$.isNumeric('-1');      // true
$.isNumeric('-1.5');    // true
$.isNumeric('0');       // true
$.isNumeric('0.42');    // true
$.isNumeric('.42');     // true
$.isNumeric('0x89f');   // true (valid hexa number)
$.isNumeric('99,999');  // false
$.isNumeric('#abcdef'); // false
$.isNumeric('1.2.3');   // false
$.isNumeric('');        // false
$.isNumeric('blah');    // false

だけこだわ 0x89f 有効な番号(ヘキサ)

に行うことができない正規表現として

function IsNumeric(data){
    return parseFloat(data)==data;
}

この問題なかったjQueryだjQueryの使い:

$.isNumeric(val)

シンプルです。

https://api.jquery.com/jQuery.isNumeric/ (jQuery1.7)

がん間違いで、これを一致させる必要がある場合、JavaScriptの数値を除く定数(Infinity, NaN の署名者 +/- (でないという理由によって、実際に部品の調査を実施しているのは、同じ関係者は、別途ーティシペーションオペレーター:

いこのためのトークナイザが送信の番号にJavaScriptのための評価なオプション...レコード店ディスクユニオンの最短正規表現になりそう漁獲量の細かい微妙なJavaScriptの構文です。

/^(?:(?:(?:[1-9]\d*|\d)\.\d*|(?:[1-9]\d*|\d)?\.\d+|(?:[1-9]\d*|\d)) 
(?:[e]\d+)?|0[0-7]+|0x[0-9a-f]+)$/i

有効数字を含む

 - 0
 - 00
 - 01
 - 10
 - 0e1
 - 0e01
 - .0
 - 0.
 - .0e1
 - 0.e1
 - 0.e00
 - 0xf
 - 0Xf

無効な番号が

 - 00e1
 - 01e1
 - 00.0
 - 00x0
 - .
 - .e0
return (input - 0) == input && input.length > 0;

動作しなかった。こんなくだらないことにアラート、試験、 input.lengthundefined.ができ上がっていないように思う物件をチェックの整数を長さです。なかった

var temp = '' + input;
return (input - 0) == input && temp.length > 0;

この現代美術館などがあります。

私は、これは最良の方法:

isNumber : function(v){
   return typeof v === 'number' && isFinite(v);
}

みっと@CMSの 答え の排除 NaN および無限大に有用な数多くのです。一方のチェック NaN's"でチェックのための数値のない等、 NaN != NaN!がん3の試験をご希望の取付---

function isNumber(n) {
  n = parseFloat(n);
  return !isNaN(n) || n != n;
}
function isFiniteNumber(n) {
  n = parseFloat(n);
  return !isNaN(n) && isFinite(n);
}    
function isComparableNumber(n) {
  n = parseFloat(n);
  return (n >=0 || n < 0);
}

isFiniteNumber('NaN')
false
isFiniteNumber('OxFF')
true
isNumber('NaN')
true
isNumber(1/0-1/0)
true
isComparableNumber('NaN')
false
isComparableNumber('Infinity')
true

私isComparableNumberかりも優雅な 答え, が取り扱う六角レンチやその他の文字列表現です。

整数値で確認可能です:

function isNumeric(value) {
    var bool = isNaN(+value));
    bool = bool || (value.indexOf('.') != -1);
    bool = bool || (value.indexOf(",") != -1);
    return !bool;
};

この方法です。すべての試験で確認!

こちらは、リルビットの改良版(おそらくインターネットには想像もつかながるものなのかどうかに関して利用ではなく正確なjQueryの変然わかんないんで使用す:

function isNumeric(val) {
    return !isNaN(+val) && isFinite(val);
}

下振れのjQueryのバージョンである場合、文字列の先頭併記と最後の文字のように "123abc"parseFloat | parseInt までの数分の貸出と返却について123ものの、第二のガード isFinite 失敗します。の単項 + オペレーターで金型の非常に最初のガードから+投NaNなハイブリッド:) 少し歴書をアップロードできませんと思い固意味します。

いる以下の変数を追加します:

1. IsNumeric('0x89f') => true
2. IsNumeric('075') => true

正六角数字で始ま 0x マンチ六角数字で始ま -0x.正月の数字で始ま 0 負月の数字で始ま -0.この間のほとんどについては既に言及した考えだけでなく、六角レンチおよびoctal番号、マイナス科学、無限大についてですが、現在の小数学(4e3.2 は有効ではありません).

function IsNumeric(input){
  var RE = /^-?(0|INF|(0[1-7][0-7]*)|(0x[0-9a-fA-F]+)|((0|[1-9][0-9]*|(?=[\.,]))([\.,][0-9]+)?([eE]-?\d+)?))$/;
  return (RE.test(input));
}

カップルの検査が追加:

IsNumeric('01.05') => false
IsNumeric('1.') => false
IsNumeric('.') => false

またこの:

function IsNumeric(input) {
    return /^-?(0|[1-9]\d*|(?=\.))(\.\d+)?$/.test(input);
}

の溶液をカバー:

  • オプションの負の符号の開始
  • 単一のゼロ、または桁の数字は0から始まる、または何もしないとして、以下の期間
  • 期間は続く1つ以上の数値

私の溶液に、

function isNumeric(input) {
    var number = /^\-{0,1}(?:[0-9]+){0,1}(?:\.[0-9]+){0,1}$/i;
    var regex = RegExp(number);
    return regex.test(input) && input.length>0;
}

を示すことにより作業のような状況のかが間違っています。

こう。一部の機能は欠陥のあるよりも早くその他の機能です。

        function isNumeric(n)
        {
            var n2 = n;
            n = parseFloat(n);
            return (n!='NaN' && n2==n);
        }

説明:

コピーを作成し、その変換の数字をfloat、それを比較しそのものの数だいておりますので、番号(整数またはfloat)、マッチの番号を、その手段である。

で数値文字列としてプレー。ない仕事十六進数です。

警告:自己責任で使用してくださいな。

の答えを返す false のための空の文字列を修正。

function is_numeric(n)
{
 return (n != '' && !isNaN(parseFloat(n)) && isFinite(n));
}

チェックの場合変数を含む有効な番号とは ただの文字列を番号 Number.isFinite(value) 使用できます。

この言語で ES2015

例:

Number.isFinite(Infinity)   // false
Number.isFinite(NaN)        // false
Number.isFinite(-Infinity)  // false

Number.isFinite(0)          // true
Number.isFinite(2e64)       // true

Number.isFinite('0')        // false
Number.isFinite(null)       // false

私はより簡単な解

function isNumber(num) {
    return parseFloat(num).toString() == num
}

私はこの答えは多くのもの候補できる有用なシナリオ.

これは'.42'ではない数、4.'ではない番号です。

function isDecimal(x) {
  return '' + x === '' + +x;
}

function isInteger(x) {
  return '' + x === '' + parseInt(x);
}

isDecimal パスの試験

function testIsNumber(f) {
  return f('-1') && f('-1.5') && f('0') && f('0.42')
    && !f('.42') && !f('99,999') && !f('0x89f')
    && !f('#abcdef') && !f('1.2.3') && !f('') && !f('blah');
}

このアイデアは毎番号、整数には"標準"文字列表現を、非正規表現は不合格とすることが望ましい。そのキャストを、背中に見れば結果は、元の文字列になります。

るかどうかこれらの機能を有すの使用例です。一るのが特徴で 異なる文字列を表す列番号 (ある場合に isNumber() 試験。

これは関連する例のための数字としてオブジェクトの設定名です。

var obj = {};
obj['4'] = 'canonical 4';
obj['04'] = 'alias of 4';
obj[4];  // prints 'canonical 4' to the console.

knockoutJs Inbuildライブラリー評価機能

間での領域の検証

1)番号

self.number = ko.observable(numberValue).延長({番号:true});

テストケースクラス

numberValue = '0.0'    --> true
numberValue = '0'      --> true
numberValue = '25'     --> true
numberValue = '-1'     --> true
numberValue = '-3.5'   --> true
numberValue = '11.112' --> true
numberValue = '0x89f'  --> false
numberValue = ''       --> false
numberValue = 'sfsd'   --> false
numberValue = 'dg##$'  --> false

2)桁

self.number = ko.observable(numberValue).延長({数字:true});

テストケースクラス

numberValue = '0'      --> true
numberValue = '25'     --> true
numberValue = '0.0'    --> false
numberValue = '-1'     --> false
numberValue = '-3.5'   --> false
numberValue = '11.112' --> false
numberValue = '0x89f'  --> false
numberValue = ''       --> false
numberValue = 'sfsd'   --> false
numberValue = 'dg##$'  --> false

3)最小値と最大値

self.number = ko.observable(numberValue).延長({min:5}).延長({max:10});

この分野の受け入れ値を5-10

テストケースクラス

numberValue = '5'    --> true
numberValue = '6'    --> true
numberValue = '6.5'  --> true
numberValue = '9'    --> true
numberValue = '11'   --> false
numberValue = '0'    --> false
numberValue = ''    --> false

きを最小限にこの関数の多い方でも実施でカスタムregexが負の値またはカスタムチャート:

$('.number').on('input',function(){
    var n=$(this).val().replace(/ /g,'').replace(/\D/g,'');
    if (!$.isNumeric(n))
        $(this).val(n.slice(0, -1))
    else
        $(this).val(n)
});
function inNumeric(n){
   return Number(n).toString() === n;
}

である場合は、nは数値 Number(n) 戻りの数値は、 toString() をしている文字列です。がされない数値 Number(n) 戻ります NaN ことがないように合わせの原 n

と思いparseFloat機能することができる。以下の機能をすべての試験はこのページを含む isNumeric(Infinity) == true:

function isNumeric(n) {

    return parseFloat(n) == n;
}

@CMS'回答:おスニペットに失敗した空白の場合も機械を使用nodejs.なんと組み合わせ @ジョエルの応答 以下の

is_float = function(v) {
    return !isNaN(v) && isFinite(v) &&
        (typeof(v) == 'number' || v.replace(/^\s+|\s+$/g, '').length > 0);
}

I unittestedする場合が浮:

var t = [
        0,
        1.2123,
        '0',
        '2123.4',
        -1,
        '-1',
        -123.423,
        '-123.432',
        07,
        0xad,
        '07',
        '0xad'
    ];

その場合において、山車を含む空は空白文字およびオブジェ/配列):

    var t = [
        'hallo',
        [],
        {},
        'jklsd0',
        '',
        "\t",
        "\n",
        ' '
    ];

すべての期待ます。たぶん役立っています。

フル-ソースコードすることができた こちらの.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top