PHP's is_numeric in TypeScript

How to use

Install via yarn add locutus and import: import { is_numeric } from 'locutus/php/var/is_numeric'.

Or with CommonJS: const { is_numeric } = require('locutus/php/var/is_numeric')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1is_numeric(186.31)true
2is_numeric('Kevin van Zonneveld')false
3is_numeric(' +186.31e2')true
4is_numeric('')false
5is_numeric([])false
6is_numeric('1 ')false

Here's what our current TypeScript equivalent to PHP's is_numeric looks like.

import type { PhpRuntimeValue } from '../_helpers/_phpTypes.ts'

type NumericValue = PhpRuntimeValue

export function is_numeric(mixedVar: NumericValue): mixedVar is number | string {
// 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))
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP var functions


Star