From ebe1069a7fa246a8a7760406f6567169c1cd2ae7 Mon Sep 17 00:00:00 2001 From: James Collins Date: Fri, 17 Feb 2023 14:12:05 +1000 Subject: [PATCH] added Url validation --- resources/js/helpers/validate.ts | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/resources/js/helpers/validate.ts b/resources/js/helpers/validate.ts index 29c9f88..87d4f63 100644 --- a/resources/js/helpers/validate.ts +++ b/resources/js/helpers/validate.ts @@ -739,3 +739,44 @@ export function Required( }, }; } + +/** + * Url + */ +interface ValidationUrlOptions { + invalidMessage?: string | ((options: ValidationUrlOptions) => string); +} + +interface ValidationUrlObject extends ValidationUrlOptions { + validate: (value: string) => ValidationResult; +} + +const defaultValidationUrlOptions: ValidationUrlOptions = { + invalidMessage: "Not a supported Url format.", +}; + +/** + * Validate field is in a valid Email format + * + * @param options options data + * @returns ValidationEmailObject + */ +export function Url(options?: ValidationUrlOptions): ValidationUrlObject { + options = { ...defaultValidationUrlOptions, ...(options || {}) }; + + return { + ...options, + validate: function (value: string): ValidationResult { + return { + valid: /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*(:\d+)?([/?#][^\s]*)?$/.test( + value + ), + invalidMessages: [ + typeof this.invalidMessage === "string" + ? this.invalidMessage + : this.invalidMessage(this), + ], + }; + }, + }; +}