Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Maska dla e-mail'a

1,340 views
Skip to first unread message

Chris

unread,
May 17, 2004, 7:33:36 AM5/17/04
to
Witam, w jaki sposób utworzyć maskę wprowadzania dla adresu e-mail?

Za poprawny bym uznawał taki ciąg znaków:

str...@string2.string przy czym w string1,2 mogą występować kropki

Pozdrawiam Chris


Piotr Lipski

unread,
May 17, 2004, 8:01:50 AM5/17/04
to
Użytkownik "Chris" <su...@lexx.eu.org> napisał w wiadomości
news:c8a7u3$mlp$1...@inews.gazeta.pl...

> Witam, w jaki sposób utworzyć maskę wprowadzania dla adresu e-mail?
> Za poprawny bym uznawał taki ciąg znaków:
>
> str...@string2.string przy czym w string1,2 mogą występować kropki

Mogą czy muszą?
IMO nie da się tego załatwić maską, trzeba obsłużyć kodem w BeforeUpdate
kontrolki.

--
PL


Chris

unread,
May 17, 2004, 9:10:57 AM5/17/04
to

Użytkownik "Piotr Lipski" <xp...@nie.interia.spamuj.bo.pl.w.ryj> napisał w

>
> Mogą czy muszą?
> IMO nie da się tego załatwić maską, trzeba obsłużyć kodem w BeforeUpdate
> kontrolki.
>
> --
> PL
mogą bo poprawne są np. adresy

lala.la...@serwer.cos.tam.pl
jak i
lal...@serwerek.pl

więc ilość kropek nie jest zdefiniowana odgórnie

Pozdrawiam Chris


Piotr Lipski

unread,
May 17, 2004, 10:17:23 AM5/17/04
to
Użytkownik "Chris" <su...@lexx.eu.org> napisał w wiadomości
news:c8adkl$lgf$1...@inews.gazeta.pl...

> mogą bo poprawne są np. adresy
>
> lala.la...@serwer.cos.tam.pl
> jak i
> lal...@serwerek.pl
>
> więc ilość kropek nie jest zdefiniowana odgórnie

Oczywiście, za szybkie oczka miałem :) nie wiem czemu byłem przekonany że
mówimy o tym PO małpie (:

--
PL


Krzysztof Naworyta

unread,
May 17, 2004, 1:57:56 PM5/17/04
to
Juzer Chris <su...@lexx.eu.org> napisał

| mogą bo poprawne są np. adresy
|
| lala.la...@serwer.cos.tam.pl
| jak i
| lal...@serwerek.pl
|
| więc ilość kropek nie jest zdefiniowana odgórnie

Spotkałem się z kursami, gdzie przez połowę programu wciska się ludziskom
głupoty, ucząc ich jakichś technik z maskami ...
Jeśli jesteś ofiarą tego rodzaju kursu, to radzę abyś zażądał zwrotu
pieniędzy !
Maski są dobre jedynie *w wyjątkowych przypadkach* !
(ściśle określonych i nie znoszących wyjątków, np. POLSKI (i tylko
polski!!!) kod pocztowy)

Ktokolwiek uczy Cię, że maska może służyć np. do wymuszenia pierwszej
dużej litery w polu tekstowym, ten po prostu nie ma pojęcia o access'ie
!!!
(i programowaniu w ogóle!)

Maska Twój wróg ! Bij maskę !!

--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search?&as_ugroup=pl*msaccess

RAdek

unread,
May 17, 2004, 2:38:52 PM5/17/04
to
Witaj Chris,

W Twoim liście datowanym 17 maja 2004 (15:10:57) można przeczytać:


> Użytkownik "Piotr Lipski" <xp...@nie.interia.spamuj.bo.pl.w.ryj> napisał w
>>
>> Mogą czy muszą?
>> IMO nie da się tego załatwić maską, trzeba obsłużyć kodem w BeforeUpdate
>> kontrolki.
>>
>> --
>> PL
> mogą bo poprawne są np. adresy

> lala.la...@serwer.cos.tam.pl
> jak i
> lal...@serwerek.pl

Czy to jest poprawny adres e-mail?:
lalala@pl

Więc pewna informacja o ilości kropek jest zdefiniowana "odgórnie".

Ilość kropek po prawej stronie @ to co najmniej 1. Warto też sprawdzić,
czy nie występuje kropka bezpośrednio po @. I jeszcze ostatnie kropka
nie może wystąpić wśród ostatnich 2 znaków, czyli adres:
lalala@serwer.l też jest niepoprawny.

Poniżej jest moja procedura do sprawdzania poprawności. Nie jest w
100% skuteczna i być może przy współpracy grupy dałoby się ją
poprawić.

Function SprEmail(ByVal email As String) As Boolean

If Len(email) < 6 Then
SprEmail = False
Exit Function
End If

'Prawidłowe znaki bez kropki
Const cDomenaBK As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~_-"
Const cDomenaZK As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~_-."

Dim strDomena As String, strUser As String, znak As String
Dim PierwszaMalpa As Integer, i As Integer
Dim bDobry As Boolean
bDobry = True

PierwszaMalpa = InStr(email, "@")
If PierwszaMalpa = 0 Then
SprEmail = False
Exit Function
End If

strUser = Left(email, PierwszaMalpa - 1)
strDomena = Mid(email, PierwszaMalpa + 1)

'DOMENA
'Sprawdzenie czy 2 ostatnie znaki sa poprawne
znak = Mid(strDomena, Len(strDomena) - 1, 1)
If InStr(cDomenaBK, znak) = 0 Or InStr(cDomenaBK, Left(strDomena, 1)) = 0 Then
bDobry = False
End If

'Sprawdzenie czy pierwsza kropka
If Left(strDomena, 1) = "." Then
bDobry = False
End If

'Sprawdzenie czy nie ma 2 kropek razem
If InStr(strDomena, "..") Then
bDobry = False
End If

'Sprawdzenie czy prawidłowy każdy znak
If bDobry Then
For i = 1 To Len(strDomena)
znak = Mid(strDomena, i, 1)
If InStr(cDomenaZK, znak) = 0 Then
bDobry = False
Exit For
End If
Next i
End If

'USER
'Sprawdzenie czy prawidłowy każdy znak
If bDobry Then
For i = 1 To Len(strUser)
znak = Mid(strUser, i, 1)
If InStr(cDomenaZK, znak) = 0 Then
bDobry = False
Exit For
End If
Next i
End If

SprEmail = bDobry

End Function

--
Pozdrowienia,
RAdek

Grzegorz Danowski

unread,
May 18, 2004, 4:10:32 AM5/18/04
to

"RAdek" <rad...@bezspamu.emarketing.pl> wrote in message
news:1422241717.2...@bezspamu.emarketing.pl...
> Witaj Chris,
>
(...)

> Poniżej jest moja procedura do sprawdzania poprawności. Nie jest w
> 100% skuteczna i być może przy współpracy grupy dałoby się ją
> poprawić.
>
> Function SprEmail(ByVal email As String) As Boolean
>
> If Len(email) < 6 Then
> SprEmail = False
> Exit Function
> End If
>
> 'Prawidłowe znaki bez kropki
> Const cDomenaBK As String =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~_-"
> Const cDomenaZK As String =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~_-."
>
(...)

A poniżej moja propozycja:

Public Function GdnSprEmail(strEm As String) As Boolean
Dim varPart As Variant, varDom As Variant, strSegm As String
Dim i As Byte

GdnSprEmail = False

'podział na usera i domenę
varPart = Split(strEm, "@")
'czy nie za mało albo za dużo małp
If UBound(varPart) - LBound(varPart) <> 1 Then
Exit Function
End If

'potem po kolei każdy segment domeny (podział wg kropek)
varDom = Split(varPart(UBound(varPart)), ".")
'musi być co najmniej jedna kropka
If UBound(varDom) - LBound(varDom) < 1 Then Exit Function
For i = LBound(varDom) To UBound(varDom)
strSegm = varDom(i)
'zerowa długość lub jeden znak w przypadku ostatniego segmentu
'dyskwalifikuje od razu
If Len(strSegm) + (i = UBound(varDom)) <= 0 Then Exit Function
'sprawdź czy tylko dozwolone znaki
If Not SprawdzZnaki(strSegm) Then Exit Function
Next
If Not SprawdzZnaki(CStr(varPart(LBound(varPart)))) Then Exit Function

GdnSprEmail = True

End Function

Private Function SprawdzZnaki(strSegm As String) As Boolean
Dim j As Byte, bytZ As Byte

For j = 1 To Len(strSegm)
bytZ = Asc(Mid(strSegm, j, 1))
If Not ((bytZ >= 48 And bytZ <= 57) _
Or _
(bytZ >= 65 And bytZ <= 90) _
Or _
(bytZ >= 97 And bytZ <= 122) _
Or _
(bytZ = 126 Or bytZ = 95 Or bytZ = 45 Or bytZ = 46)) Then
SprawdzZnaki = False
Exit Function
End If
Next
SprawdzZnaki = True
End Function

Nie jest może dużo krótsza od twojej (a taki był pierwotny zamiar;), ale
powinna być chyba trochę wydajniejsza.
Pozdrawiam
Grzegorz


Krzysztof Czuryło

unread,
May 18, 2004, 5:20:53 PM5/18/04
to

"RAdek" <rad...@bezspamu.emarketing.pl> wrote in message news:1422241717.2...@bezspamu.emarketing.pl...
|
| Ilość kropek po prawej stronie @ to co najmniej 1. Warto też sprawdzić,
| czy nie występuje kropka bezpośrednio po @. I jeszcze ostatnie kropka
| nie może wystąpić wśród ostatnich 2 znaków, czyli adres:
| lalala@serwer.l też jest niepoprawny.

Skąd takie założenia?

--
KrzyCz

RAdek

unread,
May 19, 2004, 2:35:23 AM5/19/04
to
CZeść

Dnia 18 maja 2004 w pewnym liście napisane było:


> Skąd takie założenia?

Teraz już nie pamiętam dokładnie, ale z jakiegoś dokumentu. Być może
nawet RFC, bo to chyba po angielsku było.


--
Pozdrawiam RAdek

hasło na dziś:
Przysłowia polskie: Jak cię widzą - to pracuj.

0 new messages