diff --git a/readme.md b/readme.md
index 1814497..97c023b 100644
--- a/readme.md
+++ b/readme.md
@@ -255,6 +255,22 @@ is.urlInstance(url);
//=> true
```
+### .url(value)
+
+Returns `true` if `value` is a URL string.
+
+Note: this only does basic checking using the [`URL` class](https://developer.mozilla.org/en-US/docs/Web/API/URL) constructor.
+
+```js
+const url = 'https://example.com';
+
+is.url(url);
+//=> true
+
+is.url(new URL(url));
+//=> false
+```
+
##### .truthy(value)
Returns `true` for all values that evaluate to true in a boolean context:
diff --git a/source/index.ts b/source/index.ts
index 37e775b..31fdc6d 100644
--- a/source/index.ts
+++ b/source/index.ts
@@ -3,6 +3,7 @@
///
///
import symbolObservable from 'symbol-observable';
+import {URL} from 'url';
type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
type Primitive = null | undefined | string | number | boolean | Symbol;
@@ -189,6 +190,19 @@ namespace is { // tslint:disable-line:no-namespace
export const directInstanceOf = (instance: unknown, klass: Class): instance is T => Object.getPrototypeOf(instance) === klass.prototype;
export const urlInstance = (value: unknown): value is URL => isObjectOfType(TypeName.URL)(value);
+ export const urlString = (value: unknown) => {
+ if (!string(value)) {
+ return false;
+ }
+
+ try {
+ new URL(value); // tslint:disable-line no-unused-expression
+ return true;
+ } catch {
+ return false;
+ }
+ };
+
export const truthy = (value: unknown) => Boolean(value);
export const falsy = (value: unknown) => !value;
diff --git a/source/tests/test.ts b/source/tests/test.ts
index 3dd2f59..15bc9bf 100644
--- a/source/tests/test.ts
+++ b/source/tests/test.ts
@@ -576,13 +576,22 @@ test('is.directInstanceOf', t => {
});
test('is.urlInstance', t => {
- const url = new URL('https://www.example.com');
+ const url = new URL('https://example.com');
t.true(is.urlInstance(url));
t.false(is.urlInstance({}));
t.false(is.urlInstance(undefined));
t.false(is.urlInstance(null));
});
+test('is.urlString', t => {
+ const url = 'https://example.com';
+ t.true(is.urlString(url));
+ t.false(is.urlString(new URL(url)));
+ t.false(is.urlString({}));
+ t.false(is.urlString(undefined));
+ t.false(is.urlString(null));
+});
+
test('is.truthy', t => {
t.true(is.truthy('unicorn'));
t.true(is.truthy('🦄'));