Sprawdzanie poprawności adresu e-mail w SQL na podstawowym poziomie jest stosunkowo łatwe. Poniżej podaję skrypt, który pomimo odrzucania specyficznych a mimo to poprawnych adresów, sprawdzi się w większości przypadków.
Przykładów jak może zostać przeprowadzona walidacja adresu email są dziesiątki. Ale co, jeśli chcę użyć prostego skryptu SQL?
U mnie sprawdza się taki skrypt:
declare @email nvarchar(max)
if @email is null or @email = ''
print 'Adres e-mail jest pusty'
else
begin
set @email = ltrim(rtrim(lower(@email)))
if (@email not like '[a-z,0-9,,-,=]%@[a-z,0-9,,-]%.[a-z][a-z]%')
or len(@email) < 5
or @email like '%@%@%'
or @email like N'%[ ;ęóąśłżźćń;]%'
or charindex('.@',@email) <> 0
or charindex('..',@email) <> 0
or charindex(',',@email) <> 0
or right(@email,1) not between 'a' and 'z'
print 'Adres e-mail jest nieprawidłowy'
else
print 'Adres e-mail jest poprawny'
end
Oczywiście jeśli skrypt przepuszcza niepoprawne adresy lub jest zbyt czuły, wzory powyższych poleceń LIKE można dowolnie zmodyfikować według potrzeb. Sądzę jednak, że mało prawdopodobne jest wychwycenie absolutnie wszystkich ludzkich pomysłów na pomyłkę przy wpisywaniu adresu jednocześnie przepuszczając wszystkie poprawne. Pracowitym podaję link do dokumentu opisującego jakie adresy są prawidłowe: RFC 2822 „Internet Message Format” (strona 15). Można się zdziwić…
Ktoś może stwierdzić, że tego typu walidacja na poziomie bazy danych nie jest podejściem prawidłowym ale w moim przypadku nie mam żadnego wpływu na kod programu zapisującego do bazy a adresy e-mail wyciągam z niej aby później zastosować wysyłanie maili z MS SQL.
Działać będzie lepiej jeśli zamiast or @email like '%[ ;ęóąśłżźćń;]%’ wstawimy or @email like N’%[ ;ęóąśłżźćń;]%’
pozdrawiam
Dziękuję Krzysztofie, za Twoją uwagę!