This is an update on the function that doesn't require external functions. Also, it can also be transformed into a procedure should you wish to debug it.
DROP FUNCTION IF EXISTS IsValidURL
GO
CREATE FUNCTION [dbo].[IsValidUrl]
(
@Url varchar(100)
)
RETURNS BIT
AS
BEGIN
--PRINT('Original URL: '+@Url)
-- CLEAN THE URL
SET @Url = (SELECT REPLACE(@Url,'http://',''))
SET @Url = (SELECT REPLACE(@Url,'https://',''))
IF (CHARINDEX('/', @Url) !=0)
SET @Url = SUBSTRING(@Url, 0, CHARINDEX('/', @Url))
--PRINT('Cleaned URL: '+@Url)
IF (@Url LIKE '%[^a-zA-Z0-9.]%') -- check that the URL contains letters or the dot
BEGIN
RETURN 0;
--PRINT('0 -> Contains bad characters');
END
IF (CHARINDEX('.', @Url) = 0)
BEGIN
RETURN 0;
--PRINT('0 -> Doesn''t contain the dot character');
END
DECLARE @predot varchar(100)
DECLARE @postdot varchar(100)
WHILE ( CHARINDEX('.', @Url) != 0)
BEGIN
SET @predot = SUBSTRING(@Url, 0, CHARINDEX('.', @Url))
SET @postdot = SUBSTRING(@Url, CHARINDEX('.', @Url)+1, LEN(@Url))
--PRINT 'Pre dot: '+@predot
--PRINT 'Post dot: '+@postdot
IF (LEN(@predot) < 1)
BEGIN
RETURN 0;
--PRINT('0 -> Pre dot can''t be empty');
END
IF (LEN(@postdot) < 1)
BEGIN
RETURN 0;
--PRINT('0 -> Post dot can''t be empty');
END
SET @Url = @postdot
END
RETURN 1
--PRINT('1 -> Final return');
END
GO