Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mozgalica: CHECK constraint za validaciju emial adrese

[es] :: Baze podataka :: Mozgalica: CHECK constraint za validaciju emial adrese

[ Pregleda: 4188 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Mozgalica: CHECK constraint za validaciju emial adrese26.06.2013. u 15:28 - pre 131 meseci
Potrebno je napisati CHECK CONSTRAINT za proveru email adrese. Tabela za primer:

Code:

CREATE TABLE Poruke
(
Email varchar(255) NOT NULL PRIMARY KEY
)


U jeziku koji korstite, napisite ekvivalent ove naredbe:
Code:

ALTER TABLE Poruke
ADD CONSTRAINT CK_email CHECK (Email LIKE '%@%.%')

Ova verzija pokriva uslov:
"Email adresa mora da sadrzi znakove '@' i '.' u". To naravno nije dovoljno.
Kad posaljete resenje, prilozite i dodatne uslove, na primer "Znakovi '@' i '.' ne smeju da budu jedno do drugoga"

Test deck (nije kompletan, dodajte sve cega se setite):
Code:

SELECT '[email protected]' -- trebe da prodje
UNION
SELECT '[email protected]' -- trebe da prodje
UNION
SELECT '[email protected]' -- trebe da prodje
UNION
SELECT 'Paja [email protected]' -- ne sme da prodje
UNION
SELECT 'Paja [email protected].' -- ne sme da prodje
UNION
SELECT 'Paja [email protected]' -- ne sme da prodje
UNION
SELECT '@.sr' -- ne sme da prodje
UNION
SELECT '@' -- ne sme da prodje
UNION
SELECT '.' -- ne sme da prodje
UNION
SELECT '[email protected]'  -- ne sme da prodje
UNION
SELECT '@[email protected]'  -- ne sme da prodje



Srecno
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese26.06.2013. u 17:52 - pre 131 meseci
Uh ne bih hteo da kvarim zabavu, ali Oracle ima REGEXP_LIKE funkciju koja, uzgred, može da se koristi u CHECK klauzuli...

http://docs.oracle.com/cd/B193...4251/adfns_regexp.htm#CHDBCCDJ

REGEX za validnu email adresu (RFC 2822):
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Pogledati, na primer i http://www.regular-expressions.info/email.html


[Ovu poruku je menjao djoka_l dana 26.06.2013. u 19:04 GMT+1]
 
Odgovor na temu

brzak

Član broj: 66407
Poruke: 126



+5 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese26.06.2013. u 18:15 - pre 131 meseci
regexp za postgresql

ALTER TABLE Poruke
ADD CONSTRAINT CK_email CHECK (Email ~* '^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{1,})$');
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese26.06.2013. u 20:11 - pre 131 meseci
Zahvaljujem na prvom resenju. Lepo je sto ORACLE ima Regex I to je validno resenje. Ko nema Regex, mora da se muci kroz SQL. A i ko ima Regex, mozda nije znao za njega, ili nije umeo da ga upotrebi. U svakom slucaju, zahvaljujemo na resenju.

Ima li nesto za MS SQL ili Access, MySQL? Nije vazno da bude elegantno, niti kompletno. Mozda od nekoliko nekompletnih resenja napravimo jedno koje je kompletno. Zato smo trazili komenta - sta sve pokrivamonasim resenje. Resenje sa REgeEx je tipa - 'upotrebi funkciju i ne brini, neko je to vec smislio', validno resenja, alimi zelimo da vidimo malo i razmisljanje.

 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese26.06.2013. u 20:31 - pre 131 meseci
SQL Server omogucava preko SQLCLR da se koristi .NET...

Regex:
http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

MySQL vec ima ugradjen REGEXP

http://dev.mysql.com/doc/refma...en/regexp.html#operator_regexp
 
Odgovor na temu

Zoran.Eremija
Zoran Eremija
SYSTEM ANALYST
Freelancer
Beograd

Član broj: 251342
Poruke: 855
*.kbcnet.rs.

Sajt: zoraneremija.wix.com/erem..


+47 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese30.06.2013. u 13:13 - pre 131 meseci
Da se i ja pridruzim sa primerom u Access-u. http://zoraneremija.wix.com/eremijacv#!downloads/c1qda
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese02.07.2013. u 15:34 - pre 131 meseci
Zahvaljujem Zoranu, majstor je majstor Eto sad imamo REGEX I u Accesu. Funkcija koju je Zoran dao, moze se koristiti u BeforeUpdate za kontrolu ili formu u koju s eunosi email adresa.
Code:

'---------------------------------------------------------------------------------------
' Procedure : ValidateEmailAddress
' Author    : Zoran Eremija
' Date      : 30.06.2013
' Source    : http://www.access-programmers.co.uk/forums/showthread.php?t=84248
' Example   :
'---------------------------------------------------------------------------------------
'
Public Function ValidateEmailAddress(ByVal Email As String) As Boolean
    
    Dim mre As Object
    If (mre Is Nothing) Then
        Set mre = CreateObject("vbscript.regexp")
    End If
    mre.Pattern = "^(([a-zA-Z0-9]+_+)|([a-zA-Z0-9]+\-+)|" & _
                "([a-zA-Z0-9]+\.+)|([a-zA-Z0-9]+\++))*" & _
                "[a-zA-Z0-9]+@((\w+\+)|(\w+\.))*\w{1,63}" & _
                "\.[a-zA-Z0-9]{2,6}$"
    ValidateEmailAddress = mre.test(Email)
    
    If InStr(Email, "..") > 0 Then
        ValidateEmailAddress = False
    End If
    
End Function


Ja ne umem da pisem REGEX (mozda nam Zoran na Access forumu pokaze kakao se to radi?) pa sam morao da napisem CHECK constraint u Accesu (Validation Rule na nivou tabele):
Code:

Left([Email],1) Not In ("@",".") 
And Len([Email])>=6 
And Right([Email],1) Not In ("@",".") 
And Len(RTrim(LTrim([email])))=Len([email]) 
And InStr([email],".")>0 
And InStr([email],".@")=0 
And InStr([email],"@.")=0 
And InStrRev([email],".")>InStrRev([email],"@") 
And Len([email])-InStrRev([email],".")>=2 
And Len([email])=Len(Replace([email]," ",""))
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
2001:470:1f0b:1af2:f892:49e9..

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese02.07.2013. u 16:14 - pre 131 meseci
Sta se desava kada sasvim validan mejl bude odbijen od strane takvih sistema? :)
djoka_l je za sad dao najbolji primer regex-a za validaciju mada ni on nije potpun, ne prihvata TLD ili lokalni hostname kao validan (mejl@net, mejl@localhost) kao ni spejs unutar navodnika ("moj mejl"@mejl.com), mozda ima jos nesto ali ovo sam primetio.
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese04.07.2013. u 14:23 - pre 131 meseci
Citat:
(mejl@net, mejl@localhost) kao ni spejs unutar navodnika ("moj mejl"@mejl.com),
Zar su ovo validne email adrese? Ja sam mislio da je svrha constrainta upravo de se ovakvi slucajevi odbiju. Ako treba da prihvatis ovakve slucajeve, onda nema druge neog da uradis jedno od sledecg:
1. sam napsies REGEX
2. napisies CHECK constraint (validation rule u Accessu) koje ce da prihvati ili odbije tacno ono sto tebi treba.
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
..f0b:1af2:5d6c:49b1:11e1:bf4b

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese04.07.2013. u 18:33 - pre 131 meseci
Validna je, kao i recimo `~!#$%^&*-_=+|{}[email protected], ako se iskoristi i quoted-string lokalni deo moze da sadrzi sve printabilne ASCII karaktere. Wikipedija ima fine primere pa necu smisljati svoje:
Code:

[email protected]
[email protected]
[email protected]
[email protected]
user@[IPv6:2001:db8:1ff::a0b:dbd0]
"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
postbox@com
admin@mailserver1
!#$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
" "@example.org

Domen je lakse validirati mada mi na pamet padaju recimo IDN domeni, kao i IP adrese. Sve ovo treba uzeti u obzir pri validaciji email adrese. Koga zanima detaljnije moze da pogleda RFC5322 koji je zamenio RFC2822.

Citat:
Ako treba da prihvatis ovakve slucajeve, onda nema druge neog da uradis jedno od sledecg:
1. sam napsies REGEX
2. napisies CHECK constraint (validation rule u Accessu) koje ce da prihvati ili odbije tacno ono sto tebi treba.

Postoji i treci i najbolji nacin pored ta dva navedena: ne uradis nista od toga i jednostavno posaljes mejl korisniku, ali to nije tema tako da podrzavam svakoga ko misli da moze da napise dobru proveru da je podeli sa nama :)
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Mozgalica: CHECK constraint za validaciju emial adrese05.07.2013. u 16:38 - pre 131 meseci
Zahvaljujem. Au, pa izgleda da bas skoro sve prolazi. Nesto smo ipak naucili iz cele price, REGEX ili ne REGEX

Izgleda da postoje dva oblika:
<neki text>@[IP adresa]

<neki text>@example.<neki text>.com

Znaci, ako minimum, treba nam @ I neki text ispred toga (bukvalno bilo sta?)
Posle @ dodje ili IP adresa u zagradama []
ili imamao @.nesto. neki text.com - bar jena tacka iza @ i dva ili tri karaktera iz atacke .rs, .org mozad i .a samo?

Vazi li i dalje da ne smeju da budu zajedno dva znaka @, kao @@ ?

Testirao sam moje ogranicenje u Accesu, sa ovim cudno izgledajucim primerima:
Code:

Left([Email],1) Not In ("@",".") 
And Len([Email])>=6 
And Right([Email],1) Not In ("@",".") 
And (Len(RTrim(LTrim([email])))=Len([email])) 
And InStr([email],".")>0 
And InStr([email],".@")=0 
And InStr([email],"@.")=0 
And InStrRev([email],".")>InStrRev([email],"@") 
And (Len([email])-InStrRev([email],"."))>=2 
And (Len([email])-InStrRev([email],"."))<=3

ZNacenje ogranicenja:
Left([Email],1) Not In ("@",".")                 -- no > or @ at the beginning
And Len([Email])>=6                             -- at least 6 characters
And Right([Email],1) Not In ("@",".")             -- does not end with @ or .
And (Len(RTrim(LTrim([email])))=Len([email]))      -- no space characters AT THE BEGINNING OR AT THE END
And InStr([email],".")>0                         -- there must be at least one .
And InStr([email],".@")=0                         -- no . and @ next to each other, AS IN .@
And InStr([email],"@.")=0                         -- no > and @ next to each other, AS IN .@
And InStrRev([email],".")>InStrRev([email],"@") -- at least one . must be after @
And (Len([email])-InStrRev([email],"."))>=2     -- at least 2 chars after last .
And (Len([email])=Len(Replace([email]," ",""))) -- no spaces in the middle -- ovo je uklonjeno da bi prosao "much.more unusual"@example.com 
And (Len([email])-InStrRev([email],"."))<=3        -- no more than 3 chars after last .



Evo sta je sve proslo:
Email
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
"""much.more unusual""@example.com"
!#$%&'*+-/=?^_`{}|[email protected]
"""()<>[]:,;@\\\""!#$%&'*+-/=?^_`{}| ~.a""@example.org"
""" ""@example.org"

Sta nije proslo:
"[email protected]"@example.com -- no go, ima dva znaka @
user@[IPv6:2001:db8:1ff::a0b:dbd0] -- no go, nema znak . posle @
admin@mailserver1 -- no go, nema . polse @

Ko hoce, moze da proba da napise REGEX ili ogranicenje koje prihvata ovo sto moj uslov odbacuje.






[Ovu poruku je menjao Zidar dana 05.07.2013. u 18:05 GMT+1]
 
Odgovor na temu

[es] :: Baze podataka :: Mozgalica: CHECK constraint za validaciju emial adrese

[ Pregleda: 4188 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.