is-it-check

1.0.12 • Public • Published

is-it-check

A tiny general purpose check library

... for runtime checks of js & ts apps
... because more often than not, static typechecking with typescript for compiletime checks is not enough 🤗
  • no dependencies
  • ES6+
  • tiny & fast
  • intuitive to use
  • AMD, Node & browser ready

Node.js, Frontend, SSR:

npm install is-it-check

Bower:

bower install is-it-check

Build:

npm run build

Test:

npm test

Use like any other library in your js or ts code...

import is from 'is-it-check'


// some examples
is.ipv4('198.12.3.142')  // true
is.array(['foo', 'bar', 'baz'])  // true
is.browser()  // true if current execution environment is browser
is.android()  // true if device has Android OS
is.offline()  // true if desktop or mobile is offline
is.creditCard(378282246310005)  // true
is.not.creditCard(378282246310005)  // false
is.palindrome('abba')  // true
is.umlaut('Bin ein Häschen, liebe Mören!')  // true
is.macAddress('01:23:45:67:89:ab')  // true
is.all.macAddress(null, '255.255.255.255', 4, 'a4:11:e2:67:89:1f'))  // false
is.any.email('test@example.com', 'foo', 42)  // true
is.today(new Date())  // true


// - Useful for runtime checks such as e.g. validating data from external sources.
// - We do this in addition to static type-checking with Typescript during compiletime.
const clientIPAddress = getClientIP() // from your hosting platform, nodejs, etc.

if (is.ip(clientIPAddress)) {
  // all good, we have a valid IP address... 👍
  // let's check with an IP address provider's API e.g. country of this IP for geolocation services in our app
} else {
  // no valid IP address
}

Contributing

  • Please don’t re-build the minified library on your pull request.
  • Be sure you’ve added tests to test.js if you are sending a new check.
  • Add documentation to README.md below in case of API changes (new/altered checks).
  • Feature requests should be submitted in the issue tracker, with a description of the expected behavior and use case.

Documentation

From here on down you'll find all type checks provided by is-it-check...

Type checks

is.arguments(value:any)

Checks if the given value type is arguments.

interfaces: not, all, any

const getArguments = () => arguments
const arguments = getArguments()

is.arguments(arguments)
=> true

is.not.arguments({foo: 'bar'})
=> true

is.all.arguments(arguments, 'bar')
=> false

is.any.arguments(['foo'], arguments)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.arguments([arguments, 'foo', 'bar'])
=> false

is.array(value:any)

Checks if the given value type is array.

interfaces: not, all, any

is.array(['foo', 'bar', 'baz'])
=> true

is.not.array({foo: 'bar'})
=> true

is.all.array(['foo'], 'bar')
=> false

is.any.array(['foo'], 'bar')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.array([[1, 2], 'foo', 'bar'])
=> false

is.boolean(value:any)

Checks if the given value type is boolean.

interfaces: not, all, any

is.boolean(true)
=> true

is.not.boolean({foo: 'bar'})
=> true

is.all.boolean(true, 'bar')
=> false

is.any.boolean(true, 'bar')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.boolean([true, 'foo', 'bar'])
=> false

is.date(value:any)

Checks if the given value type is date.

interfaces: not, all, any

is.date(new Date())
=> true

is.not.date({foo: 'bar'})
=> true

is.all.date(new Date(), 'bar')
=> false

is.any.date(new Date(), 'bar')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.date([new Date(), 'foo', 'bar'])
=> false

is.domNode(value:any)

Checks if the given object is a dom node.

interfaces: not, all, any

const obj = document.createElement('div')
is.domNode(obj)
=> true

is.domNode({nope: 'nope'})
=> false

is.not.domNode({})
=> true

is.all.domNode(obj, obj)
=> true

is.any.domNode(obj, {nope: 'nope'})
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.domNode([obj, {nope: 'nope'}])
=> false

is.error(value:any)

Checks if the given value type is error.

interfaces: not, all, any

is.error(new Error())
=> true

is.not.error({foo: 'bar'})
=> true

is.all.error(new Error(), 'bar')
=> false

is.any.error(new Error(), 'bar')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.error([new Error(), 'foo', 'bar'])
=> false

is.function(value:any)

Checks if the given value type is function.

interfaces: not, all, any

is.function(toString)
=> true

is.not.function({foo: 'bar'})
=> true

is.all.function(toString, 'bar')
=> false

is.any.function(toString, 'bar')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.function([toString, 'foo', 'bar'])
=> false

is.nan(value:any)

Checks if the given value type is NaN.

interfaces: not, all, any

is.nan(NaN)
=> true

is.not.nan(42)
=> true

is.all.nan(NaN, 1)
=> false

is.any.nan(NaN, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.nan([NaN, 'foo', 1])
=> false

is.null(value:any)

Checks if the given value type is null.

interfaces: not, all, any

is.null(null)
=> true

is.not.null(42)
=> true

is.all.null(null, 1)
=> false

is.any.null(null, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.null([null, 'foo', 1])
=> false

is.number(value:any)

Checks if the given value type is number.

interfaces: not, all, any

is.number(42)
=> true

is.number(NaN)
=> false

is.not.number('42')
=> true

is.all.number('foo', 1)
=> false

is.any.number({}, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.number([42, 'foo', 1])
=> false

is.object(value:any)

Checks if the given value type is object.

interfaces: not, all, any

is.object({foo: 'bar'})
=> true

// functions are also returning as true
is.object(toString)
=> true

is.not.object('foo')
=> true

is.all.object({}, 1)
=> false

is.any.object({}, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.object([{}, new Object()])
=> true

is.json(value:any)

Checks if the given value type is pure json object.

interfaces: not, all, any

is.json({foo: 'bar'})
=> true

// functions are returning as false
is.json(toString)
=> false

is.not.json([])
=> true

is.all.json({}, 1)
=> false

is.any.json({}, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.json([{}, {foo: 'bar'}])
=> true

is.regexp(value:any)

Checks if the given value type is RegExp.

interfaces: not, all, any

is.regexp(/test/)
=> true

is.not.regexp(['foo'])
=> true

is.all.regexp(/test/, 1)
=> false

is.any.regexp(new RegExp('ab+c'), 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.regexp([{}, /test/])
=> false

is.string(value:any)

Checks if the given value type is string.

interfaces: not, all, any

is.string('foo')
=> true

is.not.string(['foo'])
=> true

is.all.string('foo', 1)
=> false

is.any.string('foo', 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.string([{}, 'foo'])
=> false

is.char(value:any)

Checks if the given value type is char.

interfaces: not, all, any

is.char('f')
=> true

is.not.char(['foo'])
=> true

is.all.char('f', 1)
=> false

is.any.char('f', 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.char(['f', 'o', 'o'])
=> true

is.undefined(value:any)

Checks if the given value type is undefined.

interfaces: not, all, any

is.undefined(undefined)
=> true

is.not.undefined(null)
=> true

is.all.undefined(undefined, 1)
=> false

is.any.undefined(undefined, 2)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.undefined([{}, undefined])
=> false

is.sameType(value:any, other:any)

Checks if the given value types are same type.

interface: not

is.sameType(42, 7)
=> true

is.sameType(42, '7')
=> false

is.not.sameType(42, 7)
=> false

is.windowObject(value:any)

Checks if the given object is window object.

interfaces: not, all, any

is.windowObject(window)
=> true

is.windowObject({nope: 'nope'})
=> false

is.not.windowObject({})
=> true

is.all.windowObject(window, {nope: 'nope'})
=> false

is.any.windowObject(window, {nope: 'nope'})
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.windowObject([window, {nope: 'nope'}])
=> false

is.stream(value:any)

Checks if the given value is a certain stream.

interfaces: not, all, any

is.stream(fs.createReadStream(path.join(__dirname, 'test.js'))))
=> true

is.stream(new net.Socket()))
=> true

is.stream(new Stream.Duplex()))
=> true

is.stream(new Stream.PassThrough()))
=> true

is.stream(new Stream.Readable()))
=> true

is.stream(new Stream.Stream()))
=> true

is.stream(new Stream.Transform()))
=> true

is.stream(new Stream.Writable()))
=> true

is.not.stream(new Stream.Writable()))
=> false

is.not.stream('foo')
=> true

is.all.stream(new Stream.Writable(), new Stream.Readable()))
=> true

is.any.stream({'cat': 'meow'}, new Stream.Readable()))
=> true

// There are also checks for writable, readable, duplex, and transform streams.
// See tests.js for more...interfaces not, all, any work as usual.
is.writeableStream(new net.Socket()))
=> true

is.writeableStream(new Stream.Readable())
=> false

is.readableStream(new Stream.PassThrough())
=> true

is.not.readableStream(new Stream.PassThrough())
=> false

is.duplexStream(new Stream.PassThrough())
=> true

is.duplexStream(new Stream.PassThrough())
=> true

is.all.transformStream(new Stream.PassThrough(), new Stream.Writable())
=> false

Presence checks

is.empty(value:array|object|string)

Checks if the given value is empty.

interfaces: not, all, any

is.empty({})
=> true

is.empty([])
=> true

is.empty('')
=> true

is.not.empty(['foo'])
=> true

is.all.empty('', {}, ['foo'])
=> false

is.any.empty([], 42)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.empty([{}, 'foo'])
=> false

is.map(value:any)

Checks if the given value is a map.

interfaces: not, all, any

is.map(new Map())
=> true

is.map({})
=> false

is.map('')
=> false

is.not.map([])
=> true

is.any.map(new Map(), 42)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.map([new Map(), {}, 'foo'])
=> false

is.all.map([new Map(), new Map()])
=> true

is.existy(value:any)

Checks if the given value is existy. (not null or undefined)

interfaces: not, all, any

is.existy({})
=> true

is.existy(null)
=> false

is.not.existy(undefined)
=> true

is.existy(window)
=> false  // true inside a web browser, false on Node.js or in case of Server-side rendering (SSR)

is.all.existy(null, ['foo'])
=> false

is.any.existy(undefined, 42)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.existy([{}, 'foo'])
=> true

is.truthy(value:any)

Checks if the given value is truthy. (existy and not false)

interfaces: not, all, any

is.truthy(true)
=> true

is.truthy(null)
=> false

is.not.truthy(false)
=> true

is.all.truthy(null, true)
=> false

is.any.truthy(undefined, true)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.truthy([{}, true])
=> true

is.falsy(value:any)

Checks if the given value is falsy.

interfaces: not, all, any

is.falsy(false)
=> true

is.falsy(null)
=> true

is.not.falsy(true)
=> true

is.all.falsy(null, false)
=> true

is.any.falsy(undefined, true)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.falsy([false, true, undefined])
=> false

is.space(value:any)

Checks if the given value is space.

interfaces: not, all, any

is.space(' ')
=> true

is.space('foo')
=> false

is.not.space(true)
=> true

is.all.space(' ', 'foo')
=> false

is.any.space(' ', true)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.space([' ', 'foo', undefined])
=> false

RegExp checks

is.url(value:any)

Checks if the given value matches url regexp.

interfaces: not, all, any

is.url('http://www.test.com')
=> true

is.url('foo')
=> false

is.not.url(true)
=> true

is.all.url('http://www.test.com', 'foo')
=> false

is.any.url('http://www.test.com', true)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.url(['http://www.test.com', 'foo', undefined])
=> false

is.email(value:any)

Checks if the given value matches email regexp.

interfaces: not, all, any

is.email('test@test.com')
=> true

is.email('foo')
=> false

is.not.email('foo')
=> true

is.all.email('test@test.com', 'foo')
=> false

is.any.email('test@test.com', 'foo')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.email(['test@test.com', 'foo', undefined])
=> false

is.creditCard(value:any)

Checks if the given value matches credit card regexp.

interfaces: not, all, any

is.creditCard(378282246310005)
=> true

is.creditCard(123)
=> false

is.not.creditCard(123)
=> true

is.all.creditCard(378282246310005, 123)
=> false

is.any.creditCard(378282246310005, 123)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.creditCard([378282246310005, 123, undefined])
=> false

is.alphaNumeric(value:any)

Checks if the given value matches alpha numeric regexp.

interfaces: not, all, any

is.alphaNumeric('alphaNu3er1k')
=> true

is.alphaNumeric('*?')
=> false

is.not.alphaNumeric('*?')
=> true

is.all.alphaNumeric('alphaNu3er1k', '*?')
=> false

is.any.alphaNumeric('alphaNu3er1k', '*?')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.alphaNumeric(['alphaNu3er1k', '*?'])
=> false

is.timeString(value:any)

Checks if the given value matches time string regexp.

interfaces: not, all, any

is.timeString('13:45:30')
=> true

is.timeString('90:90:90')
=> false

is.not.timeString('90:90:90')
=> true

is.all.timeString('13:45:30', '90:90:90')
=> false

is.any.timeString('13:45:30', '90:90:90')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.timeString(['13:45:30', '90:90:90'])
=> false

is.dateString(value:any)

Checks if the given value matches date string regexp.

interfaces: not, all, any

is.dateString('11/11/2011')
=> true

is.dateString('10-21-2012')
=> true

is.dateString('90/11/2011')
=> false

is.not.dateString('90/11/2011')
=> true

is.all.dateString('11/11/2011', '90/11/2011')
=> false

is.any.dateString('11-11-2011', '90/11/2011')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.dateString(['11/11/2011', '90/11/2011'])
=> false

is.usZipCode(value:any)

Checks if the given value matches US zip code regexp.

interfaces: not, all, any

is.usZipCode('02201-1020')
=> true

is.usZipCode('123')
=> false

is.not.usZipCode('123')
=> true

is.all.usZipCode('02201-1020', '123')
=> false

is.any.usZipCode('02201-1020', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.usZipCode(['02201-1020', '123'])
=> false

is.caPostalCode(value:any)

Checks if the given value matches Canada postal code regexp.

interfaces: not, all, any

is.caPostalCode('L8V3Y1')
=> true

is.caPostalCode('L8V 3Y1')
=> true

is.caPostalCode('123')
=> false

is.not.caPostalCode('123')
=> true

is.all.caPostalCode('L8V3Y1', '123')
=> false

is.any.caPostalCode('L8V3Y1', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.caPostalCode(['L8V3Y1', '123'])
=> false

is.ukPostCode(value:any)

Checks if the given value matches UK post code regexp.

interfaces: not, all, any

is.ukPostCode('B184BJ')
=> true

is.ukPostCode('123')
=> false

is.not.ukPostCode('123')
=> true

is.all.ukPostCode('B184BJ', '123')
=> false

is.any.ukPostCode('B184BJ', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.ukPostCode(['B184BJ', '123'])
=> false

is.nanpPhone(value:any)

Checks if the given value matches North American numbering plan phone regexp.

interfaces: not, all, any

is.nanpPhone('609-555-0175')
=> true

is.nanpPhone('123')
=> false

is.not.nanpPhone('123')
=> true

is.all.nanpPhone('609-555-0175', '123')
=> false

is.any.nanpPhone('609-555-0175', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.nanpPhone(['609-555-0175', '123'])
=> false

is.eppPhone(value:any)

Checks if the given value matches extensible provisioning protocol phone regexp.

interfaces: not, all, any

is.eppPhone('+90.2322456789')
=> true

is.eppPhone('123')
=> false

is.not.eppPhone('123')
=> true

is.all.eppPhone('+90.2322456789', '123')
=> false

is.any.eppPhone('+90.2322456789', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.eppPhone(['+90.2322456789', '123'])
=> false

is.socialSecurityNumber(value:any)

Checks if the given value matches social security number regexp.

interfaces: not, all, any

is.socialSecurityNumber('017-90-7890')
=> true

is.socialSecurityNumber('017907890')
=> true

is.socialSecurityNumber('123')
=> false

is.not.socialSecurityNumber('123')
=> true

is.all.socialSecurityNumber('017-90-7890', '123')
=> false

is.any.socialSecurityNumber('017907890', '123')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.socialSecurityNumber(['017-90-7890', '123'])
=> false

is.affirmative(value:any)

Checks if the given value matches affirmative regexp.

interfaces: not, all, any

is.affirmative('yes')
=> true

is.affirmative('no')
=> false

is.not.affirmative('no')
=> true

is.all.affirmative('yes', 'no')
=> false

is.any.affirmative('yes', 'no')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.affirmative(['yes', 'y', 'true', 't', 'ok', 'okay'])
=> true

is.hexadecimal(value:any)

Checks if the given value matches hexadecimal regexp.

interfaces: not, all, any

is.hexadecimal('f0f0f0')
=> true

is.hexadecimal('0xf0f0f0')
=> true

is.hexadecimal(2.5)
=> false

is.not.hexadecimal('string')
=> true

is.all.hexadecimal('ff', 'f50')
=> true

is.any.hexadecimal('0xff5500', true)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.hexadecimal(['fff', '333', 'f50'])
=> true

is.hexColor(value:any)

Checks if the given value matches hexcolor regexp.

interfaces: not, all, any

is.hexColor('#333')
=> true

is.hexColor('#3333')
=> false

is.not.hexColor(0.5)
=> true

is.all.hexColor('fff', 'f50')
=> true

is.any.hexColor('ff5500', 0.5)
=> false

// 'all' and 'any' interfaces can also take array parameter
is.all.hexColor(['fff', '333', 'f50'])
=> true

is.ip(value:any)

Checks if the given value matches ip regexp

interfaces: not, all, any

is.ip('198.156.23.5')
=> true

is.ip('1.2..5')
=> false

is.not.ip('8:::::::7')
=> true

is.all.ip('0:1::4:ff5:54:987:C', '123.123.123.123')
=> true

is.any.ip('123.8.4.3', '0.0.0.0')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.ip(['123.123.23.12', 'A:B:C:D:E:F:0:0'])
=> true

is.ipv4(value:any)

Checks if the given value matches ipv4 regexp

interfaces: not, all, any

is.ipv4('198.12.3.142')
=> true

is.ipv4('1.2..5')
=> false

is.not.ipv4('8:::::::7')
=> true

is.all.ipv4('198.12.3.142', '123.123.123.123')
=> true

is.any.ipv4('255.255.255.255', '850..1.4')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.ipv4(['198.12.3.142', '1.2.3'])
=> false

is.ipv6(value:any)

Checks if the given value matches ipv6 regexp

interfaces: not, all, any

is.ipv6('2001:DB8:0:0:1::1')
=> true

is.ipv6('985.12.3.4')
=> true

is.not.ipv6('8:::::::7')
=> true

is.all.ipv6('2001:DB8:0:0:1::1', '1:50:198:2::1:2:8')
=> true

is.any.ipv6('255.255.255.255', '2001:DB8:0:0:1::1')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.ipv6(['2001:DB8:0:0:1::1', '1.2.3'])
=> false

is.macAddress(value:any)

Checks if the given value matches macAddress regexp

interfaces: not, all, any

is.macAddress('01:23:45:67:89:ab')
=> true

is.not.macAddress('01:23:45:67:89:ab:21')
=> true

is.all.macAddress('01:23:45:67:89:ab', 'a4:11:e2:67:89:1f')
=> true

is.any.macAddress(null, '255.255.255.255', 4, 'a4:11:e2:67:89:1f')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.any.macAddress(['2001:DB8:0:0:1::1', '01:23:45:67:89:ab'])
=> true

is.crawler(value:any)

Checks if the useragent is a web crawler

A Web crawler, sometimes called a spider or spiderbot and often shortened to crawler, is an Internet bot that systematically browses the World Wide Web and that is typically operated by search engines for the purpose of Web indexing (web spidering).

interfaces: not, all, any

is.crawler('APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)')
=> true

is.crawler(34)
=> false

is.not.crawler('APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)')
=> false

is.crawler('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36')
=> false

is.all.crawler('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36', 'APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)')
=> false

is.any.crawler('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36', 'APIs-Google (+https://developers.google.com/webmasters/APIs-Google.html)')
=> true

String checks

is.include(value:string, target:string)

Checks if the given string contains a substring.

interface: not

is.include('Some text goes here', 'text')
=> true

is.include('test', 'text')
=> false

is.not.include('test', 'text')
=> true

is.umlaut(value:string)

Checks if the given string contains umlauts Ä, ä, Ö, ö, Ü, ü, ß.

interfaces: not, all, any

is.umlaut('Bär')
=> true

is.umlaut('foo')
=> false

is.umlaut(2)
=> false

is.not.umlaut('test.de')
=> true

is.any.umlaut('Käse', 3))
=> true

is.all.umlaut('Käse', 'Bin ein Häschen, liebe Mören!')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.umlaut(['Käse', 'Übelkeit')])
=> true

is.upperCase(value:string)

Checks if the given string is UPPERCASE.

interfaces: not, all, any

is.upperCase('YEAP')
=> true

is.upperCase('nope')
=> false

is.not.upperCase('Nope')
=> true

is.all.upperCase('YEAP', 'nope')
=> false

is.any.upperCase('YEAP', 'nope')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.upperCase(['YEAP', 'ALL UPPERCASE'])
=> true

is.lowerCase(value:string)

Checks if the given string is lowercase.

interfaces: not, all, any

is.lowerCase('yeap')
=> true

is.lowerCase('NOPE')
=> false

is.not.lowerCase('Nope')
=> true

is.all.lowerCase('yeap', 'NOPE')
=> false

is.any.lowerCase('yeap', 'NOPE')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.lowerCase(['yeap', 'all lowercase'])
=> true

is.startWith(value:string, target:string)

Checks if the given string starts with substring.

interface: not

is.startWith('yeap', 'ye')
=> true

is.startWith('nope', 'ye')
=> false

is.not.startWith('nope not that', 'not')
=> true

is.endWith(value:string, target:string)

Checks if the given string ends with substring.

interfaces: not

is.endWith('yeap', 'ap')
=> true

is.endWith('nope', 'no')
=> false

is.not.endWith('nope not that', 'not')
=> true

is.endWith('yeap that one', 'one')
=> true

is.capitalized(value:string)

Checks if the given string is capitalized.

interfaces: not, all, any

is.capitalized('Yeap')
=> true

is.capitalized('nope')
=> false

is.not.capitalized('nope not capitalized')
=> true

is.not.capitalized('nope Capitalized')
=> true

is.all.capitalized('Yeap', 'All', 'Capitalized')
=> true

is.any.capitalized('Yeap', 'some', 'Capitalized')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.capitalized(['Nope', 'not'])
=> false

is.palindrome(value:string)

Checks if the given string is palindrome.

interfaces: not, all, any

is.palindrome('testset')
=> true

is.palindrome('A man, a plan, a canal - Panama!')
=> true

is.palindrome('nope')
=> false

is.palindrome('café ífac')  // currently only ASCII characters are considered
=> true

is.not.palindrome('nope not palindrome')
=> true

is.not.palindrome('tt')
=> false

is.all.palindrome('testset', 'tt')
=> true

is.any.palindrome('Yeap', 'some', 'testset')
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.palindrome(['Nope', 'testset'])
=> false

Arithmetic checks

is.equal(value:any, other:any)

Checks if the given values are equal.

interfaces: not

is.equal(42, 40 + 2)
=> true

is.equal('yeap', 'yeap')
=> true

is.not.equal('yeap', 'nope')
=> true

is.equal(true, true)
=> true

is.equal([1,3,8], [1,3,8])
=> true

is.equal([1,3,8], [1,8,3])
=> true

is.equal([1,3], [1,8,3])
=> false

is.equal([true, false], [false, true])
=> true

is.equal(['foo', 'bar', 'baz'], ['baz', 'bar', 'foo'])
=> true

is.not.equal([], [])
=> false

is.equal({'a': 1, 'b': 'nose'}, {'a': 1, 'b': 'nose'})
=> true

is.not.equal({'a': 'nose', 'b': 1}, {'b': 1, 'a': 'nose'})
=> true

is.equal({'a': 'nose', 'b': {'c': 3, 'd': true}}, {'a': 'nose', 'b': {'c': 3, 'd': true}})
=> true

is.even(value:number)

Checks if the given value is even.

interfaces: not, all, any

is.even(42)
=> true

is.not.even(41)
=> true

is.all.even(40, 42, 44)
=> true

is.any.even(39, 42, 43)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.even([40, 42, 43])
=> false

is.odd(value:number)

Checks if the given value is odd.

interfaces: not, all, any

is.odd(41)
=> true

is.not.odd(42)
=> true

is.all.odd(39, 41, 43)
=> true

is.any.odd(39, 42, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.odd([40, 42, 43])
=> false

is.positive(value:number)

Checks if the given value is positive.

interfaces: not, all, any

is.positive(41)
=> true

is.not.positive(-42)
=> true

is.all.positive(39, 41, 43)
=> true

is.any.positive(-39, 42, -44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.positive([40, 42, -43])
=> false

is.negative(value:number)

Checks if the given value is negative.

interfaces: not, all, any

is.negative(-41)
=> true

is.not.negative(42)
=> true

is.all.negative(-39, -41, -43)
=> true

is.any.negative(-39, 42, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.negative([40, 42, -43])
=> false

is.above(value:number, min:number)

Checks if the given value is above minimum value.

interface: not

is.above(41, 30)
=> true

is.not.above(42, 50)
=> true

is.under(value:number, max:number)

Checks if the given value is under maximum value.

interface: not

is.under(30, 35)
=> true

is.not.under(42, 30)
=> true

is.within(value:number, min:number, max:number)

Checks if the given value is within minimum and maximum values.

interface: not

is.within(30, 20, 40)
=> true

is.not.within(40, 30, 35)
=> true

is.decimal(value:number)

Checks if the given value is decimal.

interfaces: not, all, any

is.decimal(41.5)
=> true

is.not.decimal(42)
=> true

is.all.decimal(39.5, 41.5, -43.5)
=> true

is.any.decimal(-39, 42.5, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.decimal([40, 42.5, -43])
=> false

is.integer(value:number)

Checks if the given value is integer.

interfaces: not, all, any

is.integer(41)
=> true

is.not.integer(42.5)
=> true

is.all.integer(39, 41, -43)
=> true

is.any.integer(-39, 42.5, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.integer([40, 42.5, -43])
=> false

is.finite(value:number)

Checks if the given value is finite.

interfaces: not, all, any

is.finite(41)
=> true

is.not.finite(42 / 0)
=> true

is.all.finite(39, 41, -43)
=> true

is.any.finite(-39, Infinity, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.finite([Infinity, -Infinity, 42.5])
=> false

is.infinite(value:number)

Checks if the given value is infinite.

interfaces: not, all, any

is.infinite(Infinity)
=> true

is.not.infinite(42)
=> true

is.all.infinite(Infinity, -Infinity, -43 / 0)
=> true

is.any.infinite(-39, Infinity, 44)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.infinite([Infinity, -Infinity, 42.5])
=> false

Object checks

is.propertyCount(value:object, count:number)

Checks if objects' property count is equal to given count.

interface: not

is.propertyCount({this: 'is', 'sample': object}, 2)
=> true

is.propertyCount({this: 'is', 'sample': object}, 3)
=> false

is.not.propertyCount({}, 2)
=> true

is.propertyDefined(value:object, property:string)

Checks if the given property is defined on object.

interface: not

is.propertyDefined({yeap: 'yeap'}, 'yeap')
=> true

is.propertyDefined({yeap: 'yeap'}, 'nope')
=> false

is.not.propertyDefined({}, 'nope')
=> true

Array checks

is.inArray(value:any, array)

Checks if the given item is in array?

interface: not

is.inArray(2, [1, 2, 3])
=> true

is.inArray(4, [1, 2, 3])
=> false

is.not.inArray(4, [1, 2, 3])
=> true

is.sorted(value:array, sign:string)

Checks if the given array is sorted. Sign is optional parameter.

interfaces: not, all, any

is.sorted([1, 2, 3])
=> true

is.sorted([1, 2, 4, 3])
=> false

is.sorted([1, 1, 2, 2], '>=')
=> true

is.sorted([1, 2, 3, 4], '>')
=> true

is.sorted([4, 3, 3, 1], '<=')
=> true

is.sorted([4, 3, 2, 1], '<')
=> true

is.sorted([1, 2, 3, 3], '>')
=> false

is.not.sorted([5, 4, 3])
=> true

is.not.sorted([5, 4, 3], '<')
=> false

is.all.sorted([1, 2], [3, 4])
=> true

is.any.sorted([1, 2], [5, 4])
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.sorted([[1, 2], [5, 4]])
=> false

Environment checks

⚠️ Environment checks are not available as node module

  • i.e. checks such as is.ios() will only work inside a client execution environment such as a web browser.
  • Below are therefore checks to determine your execution environment so you can do:
is.browser() ? is.ios() : 'current execution environment is no web browser 🤷'

Execution Environment Checks


is.browser(), is.nodejs(), is.deno, is.webworker

Checks to determine your current execution environment.

interface: not

is.browser()
=> true if current execution environment is browser

is.not.browser()
=> true if current execution environment is not browser

is.nodejs()
=> true if current execution environment is Node.js

is.deno()
=> true if current execution environment is Deno

is.webworker()
=> true if current execution environment is webworker

Environment Checks


is.ie(range:number|string)

Checks if current browser is ie. Parameter is optional version range (or number) of browser.

interface: not

is.ie()
=> true if current browser is ie

is.not.ie()
=> false if current browser is ie

// also supports version number
is.ie(10)
=> true if current version of ie is 10

is.ie('>=10')
=> true if current version of ie is greater than or equal to 10

is.not.ie('<9')
=> true if current version of ie is not less than 9

is.chrome(range:number|string)

Checks if current browser is chrome. Parameter is optional version range (or number) of browser.

interface: not

is.chrome()
=> true if current browser is chrome

is.not.chrome()
=> false if current browser is chrome

// also supports version number
is.chrome(50)
=> true if current version of chrome is 50

is.chrome('>=40')
=> true if current version of chrome is greater than or equal to 40

is.not.chrome('<30')
=> true if current version of chrome is not less than 30

is.firefox(range:number|string)

Checks if current browser is firefox. Parameter is optional version range (or number) of browser.

interface: not

is.firefox()
=> true if current browser is firefox

is.not.firefox()
=> false if current browser is firefox

// also supports version number
is.firefox(41)
=> true if current version of firefox is 41

is.firefox('>=40')
=> true if current version of firefox is greater than or equal to 40

is.not.firefox('<30')
=> true if current version of firefox is not less than 30

is.edge(range:number|string)

Checks if current browser is edge. Parameter is optional version range (or number) of browser.

interface: not

is.edge()
=> true if current browser is edge

is.not.edge()
=> false if current browser is edge

// also supports version number
is.edge(13)
=> true if current version of edge is 13

is.edge('>=12')
=> true if current version of edge is greater than or equal to 12

is.not.edge('<13')
=> true if current version of edge is not less than 13

is.opera(range:number|string)

Checks if current browser is opera. Parameter is optional version range (or number) of browser.

interface: not

is.opera()
=> true if current browser is opera

is.not.opera()
=> false if current browser is opera

// also supports version number
is.opera(36)
=> true if current version of opera is 36

is.opera('>=35')
=> true if current version of opera is greater than or equal to 35

is.not.opera('<20')
=> true if current version of opera is not less than 20

is.safari(range:number|string)

Checks if current browser is safari. Parameter is optional version range (or number) of browser.

interface: not

is.safari()
=> true if current browser is safari

is.not.safari()
=> false if current browser is safari

// also supports version number
is.safari(9)
=> true if current version of safari is 9

is.safari('>=8')
=> true if current version of safari is greater than or equal to 8

is.not.safari('<7')
=> true if current version of safari is not less than 7

is.phantom(range:number|string)

Checks if current browser is phantomjs. Parameter is optional version range (or number) of browser.

interface: not

is.phantom()
=> true if current browser is phantomjs

is.not.phantom()
=> false if current browser is phantomjs

// also supports version number
is.phantom(2)
=> true if current version of phantom is 2

is.phantom('>=1')
=> true if current version of phantomjs is greater than or equal to 1

is.not.phantom('<2')
=> true if current version of phantomjs is not less than 2

is.ios()

Checks if current device has ios.

interface: not

is.ios()
=> true if current device is iPhone, iPad or iPod

is.not.ios()
=> true if current device is not iPhone, iPad or iPod

is.iphone(range:number|string)

Checks if current device is iPhone. Parameter is optional version range (or number) of browser.

interface: not

is.iphone()
=> true if current device is iPhone

is.not.iphone()
=> true if current device is not iPhone

// also supports version number
is.iphone(9)
=> true if current version of iPhone is 9

is.iphone('>=7')
=> true if current version of iPhone is greater than or equal to 7

is.not.iphone('<8')
=> true if current version of iPhone is not less than 8

is.ipad(range:number|string)

Checks if current device is iPad.

interface: not

is.ipad()
=> true if current device is iPad

is.not.ipad()
=> true if current device is not iPad

// also supports version number
is.ipad(9)
=> true if current version of iPad is 9

is.ipad('>=7')
=> true if current version of iPad is greater than or equal to 7

is.not.ipad('<8')
=> true if current version of iPad is not less than 8

is.ipod(range:number|string)

Checks if current device is iPod.

interface: not

is.ipod()
=> true if current device is iPod

is.not.ipod()
=> true if current device is not iPod

// also supports version number
is.ipod(7)
=> true if current version of iPod is 7

is.ipod('>=5')
=> true if current version of iPod is greater than or equal to 5

is.not.ipod('<5')
=> true if current version of iPod is not less than 5

is.android()

Checks if current device has Android.

interface: not

is.android()
=> true if current device has Android OS

is.not.android()
=> true if current device has not Android OS

is.androidPhone()

Checks if current device is Android phone.

interface: not

is.androidPhone()
=> true if current device is Android phone

is.not.androidPhone()
=> true if current device is not Android phone

is.androidTablet()

Checks if current device is Android tablet.

interface: not

is.androidTablet()
=> true if current device is Android tablet

is.not.androidTablet()
=> true if current device is not Android tablet

is.blackberry()

Checks if current device is Blackberry.

interface: not

is.blackberry()
=> true if current device is Blackberry

is.not.blackberry()
=> true if current device is not Blackberry

is.windowsPhone()

Checks if current device is Windows phone.

interface: not

is.windowsPhone()
=> true if current device is Windows phone

is.not.windowsPhone()
=> true if current device is not Windows Phone

is.windowsTablet()

Checks if current device is Windows tablet.

interface: not

is.windowsTablet()
=> true if current device is Windows tablet

is.not.windowsTablet()
=> true if current device is not Windows tablet

is.windows()

Checks if current OS is Windows.

interface: not

is.windows()
=> true if current OS is Windows

is.not.windows()
=> true if current OS is not Windows

is.mac()

Checks if current OS is Mac OS X.

interface: not

is.mac()
=> true if current OS is Mac OS X

is.not.mac()
=> true if current OS is not Mac OS X

is.linux()

Checks if current OS is linux.

interface: not

is.linux()
=> true if current OS is linux

is.not.linux()
=> true if current OS is not linux

is.desktop()

Checks if current device is desktop.

interface: not

is.desktop()
=> true if current device is desktop

is.not.desktop()
=> true if current device is not desktop

is.mobile()

Checks if current device is mobile.

interface: not iPhone, iPod, Android Phone, Windows Phone, Blackberry.

is.mobile()
=> true if current device is mobile

is.not.mobile()
=> true if current device is not mobile

is.tablet()

Checks if current device is tablet.

interface: not iPad, Android Tablet, Windows Tablet

is.tablet()
=> true if current device is tablet

is.not.tablet()
=> true if current device is not tablet

is.online()

Checks if current device is online.

interface: not

is.online()
=> true if current device is online

is.not.online()
=> true if current device is not online

is.offline()

Checks if current device is offline.

interface: not

is.offline()
=> true if current device is offline

is.not.offline()
=> true if current device is not offline

is.touchDevice()

Checks if current device supports touch.

interface: not

is.touchDevice()
=> true if current device supports touch

is.not.touchDevice()
=> true if current device does not support touch

Time checks

is.today(value:date)

Checks if the given date object indicate today.

interfaces: not, all, any

const today = new Date()
is.today(today)
=> true

const yesterday = new Date(new Date().setDate(new Date().getDate() - 1))
is.today(yesterday)
=> false

is.not.today(yesterday)
=> true

is.all.today(today, today)
=> true

is.any.today(today, yesterday)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.today([today, yesterday])
=> false

is.yesterday(value:date)

Checks if the given date object indicate yesterday.

interfaces: not, all, any

const today = new Date()
is.yesterday(today)
=> false

const yesterday = new Date(new Date().setDate(new Date().getDate() - 1))
is.yesterday(yesterday)
=> true

is.not.yesterday(today)
=> true

is.all.yesterday(yesterday, today)
=> false

is.any.yesterday(today, yesterday)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.yesterday([today, yesterday])
=> false

is.tomorrow(value:date)

Checks if the given date object indicate tomorrow.

interfaces: not, all, any

const today = new Date()
is.tomorrow(today)
=> false

const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1))
is.tomorrow(tomorrow)
=> true

is.not.tomorrow(today)
=> true

is.all.tomorrow(tomorrow, today)
=> false

is.any.tomorrow(today, tomorrow)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.tomorrow([today, tomorrow])
=> false

is.past(value:date)

Checks if the given date object indicate past.

interfaces: not, all, any

const yesterday = new Date(new Date().setDate(new Date().getDate() - 1))
const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1))

is.past(yesterday)
=> true

is.past(tomorrow)
=> false

is.not.past(tomorrow)
=> true

is.all.past(tomorrow, yesterday)
=> false

is.any.past(yesterday, tomorrow)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.past([yesterday, tomorrow])
=> false

is.future(value:date)

Checks if the given date object indicate future.

interfaces: not, all, any

const yesterday = new Date(new Date().setDate(new Date().getDate() - 1))
const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1))

is.future(yesterday)
=> false

is.future(tomorrow)
=> true

is.not.future(yesterday)
=> true

is.all.future(tomorrow, yesterday)
=> false

is.any.future(yesterday, tomorrow)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.future([yesterday, tomorrow])
=> false

is.day(value:date, day:string)

Checks if the given date objects' day equal given dayString parameter.

interface: not

const mondayObj = new Date('01/26/2015')
const tuesdayObj = new Date('01/27/2015')
is.day(mondayObj, 'monday')
=> true

is.day(mondayObj, 'tuesday')
=> false

is.not.day(mondayObj, 'tuesday')
=> true

is.month(value:date, month:string)

Checks if the given date objects' month equal given monthString parameter.

interface: not

const januaryObj = new Date('01/26/2015')
const februaryObj = new Date('02/26/2015')
is.month(januaryObj, 'january')
=> true

is.month(februaryObj, 'january')
=> false

is.not.month(februaryObj, 'january')
=> true

is.year(value:date, year:number)

Checks if the given date objects' year equal given yearNumber parameter.

interface: not

const year2015 = new Date('01/26/2015')
const year2016 = new Date('01/26/2016')
is.year(year2015, 2015)
=> true

is.year(year2016, 2015)
=> false

is.not.year(year2016, 2015)
=> true

is.leapYear(value:number)

Checks if the given year number is a leap year

interfaces: not, all, any

is.leapYear(2016)
=> true

is.leapYear(2015)
=> false

is.not.leapYear(2015)
=> true

is.all.leapYear(2015, 2016)
=> false

is.any.leapYear(2015, 2016)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.leapYear([2016, 2080])
=> true

is.weekend(value:date)

Checks if the given date objects' day is weekend.

interfaces: not, all, any

const monday = new Date('01/26/2015')
const sunday = new Date('01/25/2015')
const saturday = new Date('01/24/2015')
is.weekend(sunday)
=> true

is.weekend(monday)
=> false

is.not.weekend(monday)
=> true

is.all.weekend(sunday, saturday)
=> true

is.any.weekend(sunday, saturday, monday)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.weekend([sunday, saturday, monday])
=> false

is.weekday(value:date)

Checks if the given date objects' day is weekday.

interfaces: not, all, any

const monday = new Date('01/26/2015')
const sunday = new Date('01/25/2015')
const saturday = new Date('01/24/2015')
is.weekday(monday)
=> true

is.weekday(sunday)
=> false

is.not.weekday(sunday)
=> true

is.all.weekday(monday, saturday)
=> false

is.any.weekday(sunday, saturday, monday)
=> true

// 'all' and 'any' interfaces can also take array parameter
is.all.weekday([sunday, saturday, monday])
=> false

is.inDateRange(value:date, start:date, end:date)

Checks if date is within given range.

interface: not

const saturday = new Date('01/24/2015')
const sunday = new Date('01/25/2015')
const monday = new Date('01/26/2015')
is.inDateRange(sunday, saturday, monday)
=> true

is.inDateRange(saturday, sunday, monday)
=> false

is.not.inDateRange(saturday, sunday, monday)
=> true

is.inLastWeek(value:date)

Checks if the given date is between now and 7 days ago.

interface: not

const twoDaysAgo = new Date(new Date().setDate(new Date().getDate() - 2))
const nineDaysAgo = new Date(new Date().setDate(new Date().getDate() - 9))
is.inLastWeek(twoDaysAgo)
=> true

is.inLastWeek(nineDaysAgo)
=> false

is.not.inLastWeek(nineDaysAgo)
=> true

is.inLastMonth(value:date)

Checks if the given date is between now and a month ago.

interface: not

const tenDaysAgo = new Date(new Date().setDate(new Date().getDate() - 10))
const fortyDaysAgo = new Date(new Date().setDate(new Date().getDate() - 40))
is.inLastMonth(tenDaysAgo)
=> true

is.inLastMonth(fortyDaysAgo)
=> false

is.not.inLastMonth(fortyDaysAgo)
=> true

is.inLastYear(value:date)

Checks if the given date is between now and a year ago.

interface: not

const twoMonthsAgo = new Date(new Date().setMonth(new Date().getMonth() - 2))
const thirteenMonthsAgo = new Date(new Date().setMonth(new Date().getMonth() - 13))
is.inLastYear(twoMonthsAgo)
=> true

is.inLastYear(thirteenMonthsAgo)
=> false

is.not.inLastYear(thirteenMonthsAgo)
=> true

is.inNextWeek(value:date)

Checks if the given date is between now and 7 days later.

interface: not

const twoDaysLater = new Date(new Date().setDate(new Date().getDate() + 2))
const nineDaysLater = new Date(new Date().setDate(new Date().getDate() + 9))
is.inNextWeek(twoDaysLater)
=> true

is.inNextWeek(nineDaysLater)
=> false

is.not.inNextWeek(nineDaysLater)
=> true

is.inNextMonth(value:date)

Checks if the given date is between now and a month later.

interface: not

const tenDaysLater = new Date(new Date().setDate(new Date().getDate() + 10))
const fortyDaysLater = new Date(new Date().setDate(new Date().getDate() + 40))
is.inNextMonth(tenDaysLater)
=> true

is.inNextMonth(fortyDaysLater)
=> false

is.not.inNextMonth(fortyDaysLater)
=> true

is.inNextYear(value:date)

Checks if the given date is between now and a year later.

interface: not

const twoMonthsLater = new Date(new Date().setMonth(new Date().getMonth() + 2))
const thirteenMonthsLater = new Date(new Date().setMonth(new Date().getMonth() + 13))
is.inNextYear(twoMonthsLater)
=> true

is.inNextYear(thirteenMonthsLater)
=> false

is.not.inNextYear(thirteenMonthsLater)
=> true

is.quarterOfYear(value:date, quarter:number)

Checks if the given date is in the parameter quarter.

interface: not

const firstQuarter = new Date('01/26/2015')
const secondQuarter = new Date('05/26/2015')
is.quarterOfYear(firstQuarter, 1)
=> true

is.quarterOfYear(secondQuarter, 1)
=> false

is.not.quarterOfYear(secondQuarter, 1)
=> true

is.dayLightSavingTime(value:date)

Checks if the given date is in daylight saving time.

interface: not

// For Turkey Time Zone
const january1 = new Date('01/01/2015')
const june1 = new Date('06/01/2015')

is.dayLightSavingTime(june1)
=> true

is.dayLightSavingTime(january1)
=> false

is.not.dayLightSavingTime(january1)
=> true

Configuration

is.setNamespace()

Change namespace of library to prevent name collisions.

const customName = is.setNamespace()
customName.odd(3)
=> true

is.setRegexp(value:regexp, name:string)

Override RegExps if you think they suck.

is.url('https://www.duckduckgo.com')
=> true

is.setRegexp(/quack/, 'url')
is.url('quack')
=> true

Readme

Keywords

none

Package Sidebar

Install

npm i is-it-check

Weekly Downloads

1,334

Version

1.0.12

License

MIT

Unpacked Size

102 kB

Total Files

5

Last publish

Collaborators

  • evdama