Za poprawny bym uznawał taki ciąg znaków:
str...@string2.string przy czym w string1,2 mogą występować kropki
Pozdrawiam Chris
> 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
lala.la...@serwer.cos.tam.pl
jak i
lal...@serwerek.pl
więc ilość kropek nie jest zdefiniowana odgórnie
Pozdrawiam Chris
> 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
| 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
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
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
Skąd takie założenia?
--
KrzyCz
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.