isNumeric (v4)

Revision 4 of this benchmark created by Mikeonthemoon on


Description

Note: isNumeric1 wrongly returns true for Date objects. The others seem pretty watertight apart from isNumeric9 (basic !isNAN).

Preparation HTML

<script>
var rdigit = /\d/;
function isNumeric1(n) {
    return n != null && rdigit.test(n) && !isNaN(n);
}

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

function isNumeric3(n) {
    return /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i.test(n+'');
}

var regA = /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i;
function isNumeric4(n) {
    return regA.test(n+'');
}

function isNumeric5(n) {
    return /^\s*[+-]?\s*((\d+(\.\d+)?(e[+-]?\d+)?)|(0x[a-f\d]+))\s*$/i.test(n+'');
}

var regB = /^\s*[+-]?\s*((\d+(\.\d+)?(e[+-]?\d+)?)|(0x[a-f\d]+))\s*$/i;
function isNumeric6(n) {
    return regB.test(n+'');
}

function isNumeric7(n) { 
    var t = typeof n;
    return t == 'string' ? !n.length ? false : n.length == 1 ? /\d/.test(n) : /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i.test(n) : t == 'object' ? !!n && typeof n.valueOf() == "number" && !(n instanceof Date) : t == 'number' ? !isNaN(n) && isFinite(n) : false;
}

function isNumeric8(n) { 
    var t = typeof n;
    return t == 'number' ? !isNaN(n) && isFinite(n) : t == 'string' ? !n.length ? false : n.length == 1 ? /\d/.test(n) : /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i.test(n) : t == 'object' ? !!n && typeof n.valueOf() == "number" && !(n instanceof Date) : false;
}

function isNumeric9(n) {
    return !isNaN(n);
}
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
isNumeric1 JQuery?
isNumeric1("-10");
isNumeric1("0");
isNumeric1("5");
isNumeric1(-16);
isNumeric1(0);
isNumeric1(32);
isNumeric1("040");
isNumeric1(0144);
isNumeric1(" 0xaa ");
isNumeric1(0xFFF);
isNumeric1("-1.6");
isNumeric1("4.536");
isNumeric1(-2.6);
isNumeric1(3.1415);
isNumeric1(8e5);
isNumeric1("123e-2");
isNumeric1("");
isNumeric1("        ");
isNumeric1("\t\t");
isNumeric1("abcdefghijklm1234567890");
isNumeric1("xabcdefx");
isNumeric1(true);
isNumeric1(false);
isNumeric1("bcfed5.2");
isNumeric1("7.2acdgs");
isNumeric1(undefined);
isNumeric1(null);
isNumeric1(NaN);
isNumeric1(Infinity);
isNumeric1(Number.POSITIVE_INFINITY);
isNumeric1(Number.NEGATIVE_INFINITY);
isNumeric1(new Date(2009));
isNumeric1({});
isNumeric1(function(){});
ready
isNumeric2 Stackoverflow
isNumeric2("-10");
isNumeric2("0");
isNumeric2("5");
isNumeric2(-16);
isNumeric2(0);
isNumeric2(32);
isNumeric2("040");
isNumeric2(0144);
isNumeric2(" 0xaa ");
isNumeric2(0xFFF);
isNumeric2("-1.6");
isNumeric2("4.536");
isNumeric2(-2.6);
isNumeric2(3.1415);
isNumeric2(8e5);
isNumeric2("123e-2");
isNumeric2("");
isNumeric2("        ");
isNumeric2("\t\t");
isNumeric2("abcdefghijklm1234567890");
isNumeric2("xabcdefx");
isNumeric2(true);
isNumeric2(false);
isNumeric2("bcfed5.2");
isNumeric2("7.2acdgs");
isNumeric2(undefined);
isNumeric2(null);
isNumeric2(NaN);
isNumeric2(Infinity);
isNumeric2(Number.POSITIVE_INFINITY);
isNumeric2(Number.NEGATIVE_INFINITY);
isNumeric2(new Date(2009));
isNumeric2({});
isNumeric2(function(){});
ready
isNumeric3 non-cached non-capturing regex
isNumeric3("-10");
isNumeric3("0");
isNumeric3("5");
isNumeric3(-16);
isNumeric3(0);
isNumeric3(32);
isNumeric3("040");
isNumeric3(0144);
isNumeric3(" 0xaa ");
isNumeric3(0xFFF);
isNumeric3("-1.6");
isNumeric3("4.536");
isNumeric3(-2.6);
isNumeric3(3.1415);
isNumeric3(8e5);
isNumeric3("123e-2");
isNumeric3("");
isNumeric3("        ");
isNumeric3("\t\t");
isNumeric3("abcdefghijklm1234567890");
isNumeric3("xabcdefx");
isNumeric3(true);
isNumeric3(false);
isNumeric3("bcfed5.2");
isNumeric3("7.2acdgs");
isNumeric3(undefined);
isNumeric3(null);
isNumeric3(NaN);
isNumeric3(Infinity);
isNumeric3(Number.POSITIVE_INFINITY);
isNumeric3(Number.NEGATIVE_INFINITY);
isNumeric3(new Date(2009));
isNumeric3({});
isNumeric3(function(){});
ready
isNumeric4 cached non-capturing regex
isNumeric4("-10");
isNumeric4("0");
isNumeric4("5");
isNumeric4(-16);
isNumeric4(0);
isNumeric4(32);
isNumeric4("040");
isNumeric4(0144);
isNumeric4(" 0xaa ");
isNumeric4(0xFFF);
isNumeric4("-1.6");
isNumeric4("4.536");
isNumeric4(-2.6);
isNumeric4(3.1415);
isNumeric4(8e5);
isNumeric4("123e-2");
isNumeric4("");
isNumeric4("        ");
isNumeric4("\t\t");
isNumeric4("abcdefghijklm1234567890");
isNumeric4("xabcdefx");
isNumeric4(true);
isNumeric4(false);
isNumeric4("bcfed5.2");
isNumeric4("7.2acdgs");
isNumeric4(undefined);
isNumeric4(null);
isNumeric4(NaN);
isNumeric4(Infinity);
isNumeric4(Number.POSITIVE_INFINITY);
isNumeric4(Number.NEGATIVE_INFINITY);
isNumeric4(new Date(2009));
isNumeric4({});
isNumeric4(function(){});
ready
isNumeric5 non-cached capturing regex
isNumeric5("-10");
isNumeric5("0");
isNumeric5("5");
isNumeric5(-16);
isNumeric5(0);
isNumeric5(32);
isNumeric5("040");
isNumeric5(0144);
isNumeric5(" 0xaa ");
isNumeric5(0xFFF);
isNumeric5("-1.6");
isNumeric5("4.536");
isNumeric5(-2.6);
isNumeric5(3.1415);
isNumeric5(8e5);
isNumeric5("123e-2");
isNumeric5("");
isNumeric5("        ");
isNumeric5("\t\t");
isNumeric5("abcdefghijklm1234567890");
isNumeric5("xabcdefx");
isNumeric5(true);
isNumeric5(false);
isNumeric5("bcfed5.2");
isNumeric5("7.2acdgs");
isNumeric5(undefined);
isNumeric5(null);
isNumeric5(NaN);
isNumeric5(Infinity);
isNumeric5(Number.POSITIVE_INFINITY);
isNumeric5(Number.NEGATIVE_INFINITY);
isNumeric5(new Date(2009));
isNumeric5({});
isNumeric5(function(){});
ready
isNumeric6 cached capturing regex
isNumeric6("-10");
isNumeric6("0");
isNumeric6("5");
isNumeric6(-16);
isNumeric6(0);
isNumeric6(32);
isNumeric6("040");
isNumeric6(0144);
isNumeric6(" 0xaa ");
isNumeric6(0xFFF);
isNumeric6("-1.6");
isNumeric6("4.536");
isNumeric6(-2.6);
isNumeric6(3.1415);
isNumeric6(8e5);
isNumeric6("123e-2");
isNumeric6("");
isNumeric6("        ");
isNumeric6("\t\t");
isNumeric6("abcdefghijklm1234567890");
isNumeric6("xabcdefx");
isNumeric6(true);
isNumeric6(false);
isNumeric6("bcfed5.2");
isNumeric6("7.2acdgs");
isNumeric6(undefined);
isNumeric6(null);
isNumeric6(NaN);
isNumeric6(Infinity);
isNumeric6(Number.POSITIVE_INFINITY);
isNumeric6(Number.NEGATIVE_INFINITY);
isNumeric6(new Date(2009));
isNumeric6({});
isNumeric6(function(){});
ready
isNumeric7 long ternary A
isNumeric7("-10");
isNumeric7("0");
isNumeric7("5");
isNumeric7(-16);
isNumeric7(0);
isNumeric7(32);
isNumeric7("040");
isNumeric7(0144);
isNumeric7(" 0xaa ");
isNumeric7(0xFFF);
isNumeric7("-1.6");
isNumeric7("4.536");
isNumeric7(-2.6);
isNumeric7(3.1415);
isNumeric7(8e5);
isNumeric7("123e-2");
isNumeric7("");
isNumeric7("        ");
isNumeric7("\t\t");
isNumeric7("abcdefghijklm1234567890");
isNumeric7("xabcdefx");
isNumeric7(true);
isNumeric7(false);
isNumeric7("bcfed5.2");
isNumeric7("7.2acdgs");
isNumeric7(undefined);
isNumeric7(null);
isNumeric7(NaN);
isNumeric7(Infinity);
isNumeric7(Number.POSITIVE_INFINITY);
isNumeric7(Number.NEGATIVE_INFINITY);
isNumeric7(new Date(2009));
isNumeric7({});
isNumeric7(function(){});
ready
isNumeric8 long ternary B
isNumeric8("-10");
isNumeric8("0");
isNumeric8("5");
isNumeric8(-16);
isNumeric8(0);
isNumeric8(32);
isNumeric8("040");
isNumeric8(0144);
isNumeric8(" 0xaa ");
isNumeric8(0xFFF);
isNumeric8("-1.6");
isNumeric8("4.536");
isNumeric8(-2.6);
isNumeric8(3.1415);
isNumeric8(8e5);
isNumeric8("123e-2");
isNumeric8("");
isNumeric8("        ");
isNumeric8("\t\t");
isNumeric8("abcdefghijklm1234567890");
isNumeric8("xabcdefx");
isNumeric8(true);
isNumeric8(false);
isNumeric8("bcfed5.2");
isNumeric8("7.2acdgs");
isNumeric8(undefined);
isNumeric8(null);
isNumeric8(NaN);
isNumeric8(Infinity);
isNumeric8(Number.POSITIVE_INFINITY);
isNumeric8(Number.NEGATIVE_INFINITY);
isNumeric8(new Date(2009));
isNumeric8({});
isNumeric8(function(){});
ready
isNumeric 9 basic !isNAN
isNumeric8("-10");
isNumeric8("0");
isNumeric8("5");
isNumeric8(-16);
isNumeric8(0);
isNumeric8(32);
isNumeric8("040");
isNumeric8(0144);
isNumeric8(" 0xaa ");
isNumeric8(0xFFF);
isNumeric8("-1.6");
isNumeric8("4.536");
isNumeric8(-2.6);
isNumeric8(3.1415);
isNumeric8(8e5);
isNumeric8("123e-2");
isNumeric8("");
isNumeric8("        ");
isNumeric8("\t\t");
isNumeric8("abcdefghijklm1234567890");
isNumeric8("xabcdefx");
isNumeric8(true);
isNumeric8(false);
isNumeric8("bcfed5.2");
isNumeric8("7.2acdgs");
isNumeric8(undefined);
isNumeric8(null);
isNumeric8(NaN);
isNumeric8(Infinity);
isNumeric8(Number.POSITIVE_INFINITY);
isNumeric8(Number.NEGATIVE_INFINITY);
isNumeric8(new Date(2009));
isNumeric8({});
isNumeric8(function(){});
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by dmethvin on
  • Revision 4: published by Mikeonthemoon on