Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Реализация проверки правильности e-mail на SQL (может быть кому-то пригодится)  [new]
.aaz
Member

Откуда: Россия, Москва
Сообщений: 13
написано для использования в хранимых процедурах, в качестве комментариев к тому, что проверяется, можно смотреть сообщения об ошибках :-)
..................................................................................................................
declare @email
declare @username varchar(200)
declare @domain varchar(200)

declare @msg varchar(255)
declare @temp_str varchar(200)
declare @len int

set @email='1.1@1.com'

if ltrim(rtrim(@email))<>''
	begin
	select 	@username=rtrim(ltrim(lower(SUBSTRING(@email,1,CHARINDEX('@',@email)-1))))
		,@domain=rtrim(ltrim(lower(SUBSTRING(@email,CHARINDEX('@',@email)+1,len(@email)-CHARINDEX('@',@email)+1))))
	
	--*************** проверка правильности имени пользователя
	if CHARINDEX(' ',@username)!=0
		begin
		RAISERROR('Введённый email содержит пробелы в имени пользователя.',16,1)
		return @@error
		end	

	if SUBSTRING(@username,1,1)='.'
		begin
		RAISERROR('Точка (.), в имени пользователя не может быть первым символом.',16,1)
		return @@error
		end

	if SUBSTRING(@username,1,1)='-'
		begin
		RAISERROR('Минус (-), в имени пользователя не может быть первым символом.',16,1)
		return @@error
		end

	if SUBSTRING(@username,1,1)='_'
		begin
		RAISERROR('Подчёркивание (_), в имени пользователя не может быть первым символом.',16,1)
		return @@error
		end


	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@username,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'_',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
	
	if LEN(@temp_str)<>0
		begin
		select @msg='Введённый email содержит недопустимые символы в имени пользователя:
'+@temp_str
		RAISERROR(@msg,16,1)
		return @@error
		end
	
	--*************** проверка правильности домена
	if CHARINDEX(' ',@domain)!=0
		begin
		RAISERROR('Введённый email содержит пробелы в домене.',16,1)
		return @@error
		end	

	if CHARINDEX('.',@domain)=0
		begin
		RAISERROR('Домен должен содержать хотя бы одну точку (.).',16,1)
		return @@error
		end	
	
	if SUBSTRING(@domain,1,1)='.' or SUBSTRING(@domain,len(@domain),1)='.'
		begin
		RAISERROR('Точка (.), в домене не может быть первым или последним символом.',16,1)
		return @@error
		end	
	
	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@domain,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
	if LEN(@temp_str)<>0
		begin
		select @msg='Введённый email содержит недопустимые символы в домене:
'+@temp_str
		RAISERROR(@msg,16,1)
		return @@error
		end
	
	select @len=len(@domain)
	while @len>0
		begin
		if substring(@domain,@len,1)='.'
			break
		select @len=@len-1
		end
	
	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(substring(@domain,@len+1,len(@domain)-@len+1),'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z','')
	if LEN(@temp_str)<>0
		begin
		select @msg='Введённый email содержит недопустимые символы в суффиксе домена
(то, что написано после последней точки):
'+@temp_str
		RAISERROR(@msg,16,1)
		return @@error
		end
	
	select @email=rtrim(ltrim(SUBSTRING(@email,1,CHARINDEX('@',@email)-1)))+'@'+rtrim(ltrim(SUBSTRING(@email,CHARINDEX('@',@email)+1,len(@email)-CHARINDEX('@',@email)+1)))
	end
16 июн 05, 18:14    [1626562]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Реализация проверки правильности e-mail на SQL (может быть кому-то пригодится)  [new]
Jakushev
Member

Откуда:
Сообщений: 13
Побольше бы таких тем! Спасибо. Под свои нужны сделал так:

--проверяет адрес эл. почты 1 - else - not ok

/********************************************/
--КОДЫ ОШИБОК
--100 Введённый email содержит пробелы в имени пользователя.
--101 Точка (.), в имени пользователя не может быть первым символом.
--102 Минус (-), в имени пользователя не может быть первым символом.
--103 Подчёркивание (_), в имени пользователя не может быть первым символом.
--104 Введённый email содержит недопустимые символы в имени пользователя
--105 Введённый email содержит пробелы в домене.
--106 Домен должен содержать хотя бы одну точку (.).
--107 Точка (.), в домене не может быть первым или последним символом.
--108 Введённый email содержит недопустимые символы в домене
--109 Введённый email содержит недопустимые символы в суффиксе домена (то, что написано после последней точки)
/********************************************/

CREATE FUNCTION dbo.UDF_EMAIL_CHECK (
      @email VARCHAR(250)
)
RETURNS INT
AS
BEGIN

DECLARE @R INT
SET @R = 1

declare @username varchar(200)
declare @domain varchar(200)

declare @msg varchar(255)
declare @temp_str varchar(200)
declare @len int

if ltrim(rtrim(@email))<>''
	begin
	select 	@username=rtrim(ltrim(lower(SUBSTRING(@email,1,CHARINDEX('@',@email)-1))))
		,@domain=rtrim(ltrim(lower(SUBSTRING(@email,CHARINDEX('@',@email)+1,len(@email)-CHARINDEX('@',@email)+1))))
	
	--*************** проверка правильности имени пользователя
	if CHARINDEX(' ',@username)!=0
		begin
		     SET @R = 100
		end	

	if SUBSTRING(@username,1,1)='.'
		begin
		     SET @R = 101
		end

	if SUBSTRING(@username,1,1)='-'
		begin
		     SET @R = 102
		end

	if SUBSTRING(@username,1,1)='_'
		begin
		     SET @R = 103
		end

	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@username,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'_',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
	
	if LEN(@temp_str)<>0
		begin
	      SET @R = 104
		end
	
	--*************** проверка правильности домена
	if CHARINDEX(' ',@domain)!=0
		begin
		   SET @R = 105
		end	

	if CHARINDEX('.',@domain)=0
		begin
	        SET @R = 106
		end	
	
	if SUBSTRING(@domain,1,1)='.' or SUBSTRING(@domain,len(@domain),1)='.'
		begin
	         SET @R = 107
		end	
	
	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@domain,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
	if LEN(@temp_str)<>0
	    begin
	         SET @R = 108
		end
	
	select @len=len(@domain)
	while @len>0
		begin
		if substring(@domain,@len,1)='.'
			break
		select @len=@len-1
		end
	
	select @temp_str=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(substring(@domain,@len+1,len(@domain)-@len+1),'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z','')
	if LEN(@temp_str)<>0
		begin
		     set @R = 109
		end
	
	
	end
	
	RETURN(@R)
END

пример юзания: (найти всех пользователей с неверным мылом и показать код ошибки)

SELECT
dbo.UDF_EMAIL_CHECK(U.USER_EMAIL),
      *
FROM USERS U
WHERE
    dbo.UDF_EMAIL_CHECK(U.USER_EMAIL) != 1
24 мар 08, 13:06    [5449943]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить