ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

jQueryの$.isNumericの挙動がよくわからない件

スポンサードリンク

http://www.flickr.com/photos/16318901@N00/285731517
photo by borkweb



本当によくわからない。。。


$(function() {
	var test = '2222';
	try {
		// true
		alert($.isNumeric(test));
	} catch(e) {
		alert(e);
	}
});

$(function() {
	// 間に文字を入れてみる
	var test = '22e22';
	try {
		// true !!?
		alert($.isNumeric(test));
	} catch(e) {
		alert(e);
	}
});

$(function() {
	// もうちょっと入れてみる
	var test = '22ea22';
	try {
		// false !!?
		alert($.isNumeric(test));
	} catch(e) {
		alert(e);
	}
});


まじで良くわからない。


公式を確認するとどうやら、数字だけではないようです。

$.isNumeric("-10"); // true(数値をクォートで囲んだもの)
$.isNumeric(0xFF); // true(16進数)
$.isNumeric("0xFF"); // true(16進数をクォートで囲んだもの)
$.isNumeric("8e5"); // true(指数表記をクォートで囲んだもの)
$.isNumeric(0144); // true(8進数)
$.isNumeric(Infinity); // false(無限大は数値とは見なされない)
$.isNumeric(NaN); // false
$.isNumeric(null); // false
$.isNumeric(true); // false
$.isNumeric(undefined); // false


私は、

$.isNumeric("8e5"); // true(指数表記をクォートで囲んだもの)


に、悩まされたもよう。


この関数は使わないことにした。


色々調べたけど、めんどくせーので慣れている正規表現を使う

// チェックする文字列を読み込み
var val = $(this).val();
// 数字、全角数字以外にマッチ
val.match(/[^\d0-9]/g);
// // 全角数値が存在する場合
val.match(/[^0-9]/g);


これでよし