diff --git a/src/rules/is_url.ts b/src/rules/is_url.ts new file mode 100644 index 0000000..63fff48 --- /dev/null +++ b/src/rules/is_url.ts @@ -0,0 +1,14 @@ +import { invalid } from "../utils.ts"; +import { Validity } from "../types.ts"; + +export function isUrl(value: any): Validity { + // From + const expression = + /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g; + + const regex = new RegExp(expression); + + if (typeof value !== "string" || !regex.test(value.toLowerCase())) { + return invalid("isUrl", { value }); + } +} diff --git a/tests/rules/is_url.test.ts b/tests/rules/is_url.test.ts new file mode 100644 index 0000000..3da9ca7 --- /dev/null +++ b/tests/rules/is_url.test.ts @@ -0,0 +1,41 @@ +import { isUrl } from "../../src/rules/is_url.ts"; +import { invalid } from "../../src/utils.ts"; +import { assertInvalid, assertValid } from "../utils.ts"; + +Deno.test("rules.isUrl(null) should be invalid", () => { + assertInvalid(isUrl(null), invalid("isUrl", { value: null })); +}); + +Deno.test("rules.isUrl(undefined) should be invalid", () => { + assertInvalid(isUrl(undefined), invalid("isUrl", { value: undefined })); +}); + +Deno.test("rules.isUrl(0.1) should be invalid", () => { + assertInvalid(isUrl(0.1), invalid("isUrl", { value: 0.1 })); +}); + +Deno.test("rules.isUrl() with invalid urls should be invalid", () => { + const url = "test"; + assertInvalid(isUrl(url), invalid("isUrl", { value: url })); +}); + +Deno.test("rules.isUrl() with invalid urls should be invalid", () => { + const url = "http:/test.com"; + assertInvalid(isUrl(url), invalid("isUrl", { value: url })); +}); + +Deno.test("rules.isUrl() with valid urls should be valid", () => { + assertValid(isUrl("http://www.test.com")); +}); + +Deno.test("rules.isUrl() with valid urls should be valid", () => { + assertValid(isUrl("www.test.com")); +}); + +Deno.test("rules.isUrl() with valid urls should be valid", () => { + assertValid(isUrl("test.com")); +}); + +Deno.test("rules.isUrl() with valid urls should be valid", () => { + assertValid(isUrl("test.com/")); +});