locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
58 lines (57 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.is_numeric = is_numeric;
function is_numeric(mixedVar) {
// discuss at: https://locutus.io/php/is_numeric/
// original by: Kevin van Zonneveld (https://kvz.io)
// improved by: David
// improved by: taith
// bugfixed by: Tim de Koning
// bugfixed by: WebDevHobo (https://webdevhobo.blogspot.com/)
// bugfixed by: Brett Zamir (https://brett-zamir.me)
// bugfixed by: Denis Chenu (https://shnoulle.net)
// example 1: is_numeric(186.31)
// returns 1: true
// example 2: is_numeric('Kevin van Zonneveld')
// returns 2: false
// example 3: is_numeric(' +186.31e2')
// returns 3: true
// example 4: is_numeric('')
// returns 4: false
// example 5: is_numeric([])
// returns 5: false
// example 6: is_numeric('1 ')
// returns 6: false
const whitespace = [
' ',
'\n',
'\r',
'\t',
'\f',
'\x0b',
'\xa0',
'\u2000',
'\u2001',
'\u2002',
'\u2003',
'\u2004',
'\u2005',
'\u2006',
'\u2007',
'\u2008',
'\u2009',
'\u200a',
'\u200b',
'\u2028',
'\u2029',
'\u3000',
].join('');
// @todo: Break this up using many single conditions with early returns
if (typeof mixedVar === 'number') {
return !Number.isNaN(mixedVar);
}
if (typeof mixedVar !== 'string') {
return false;
}
return mixedVar !== '' && whitespace.indexOf(mixedVar.slice(-1)) === -1 && !Number.isNaN(Number(mixedVar));
}