Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Исключение неправельных адресов E-Mail   Найти похожие ветки 

 
Прохожий ©   (2003-07-22 10:33) [0]

Как сделать фильтр "правильности" ввода электронных адресов?


 
NickBat ©   (2003-07-22 10:39) [1]

100 процентного фильтра правильности почтовых адресов нет.


 
Прохожий ©   (2003-07-22 10:44) [2]

Я имею ввиду правильность синтаксиса


 
Ihor Osov'yak ©   (2003-07-22 10:46) [3]

Если имеется ввиду синтаксический контроль - то что-то похоже на это:


const IdentifierChars = ["A".."Z","a".."z","0".."9","_"] ;

type TokenType = ( TK_PERIOD, // . found
TK_AT, // @ found
TK_STR, // concatenation of characters
TK_EOEA ); // end of email address


function NextToken( var S, Token : string ) : TokenType ;
begin
Result := TK_EOEA ;
Token := "" ;
while ( S <> "" ) and ( S[1] = " " ) do
delete( S, 1, 1 ) ;
if ( S <> "" ) then
begin
if ( S[1] in IdentifierChars ) then
begin
while ( S <> "" ) and
( S[1] in IdentifierChars ) do
begin
Token := Token + S[1] ;
delete( S, 1, 1 ) ;
end ;
Result := TK_STR ;
end
else
begin
case S[1] of
"." : Result := TK_PERIOD ;
"@" : Result := TK_AT ;
end ;
delete( S, 1, 1 ) ;
end
end
else Result := TK_EOEA ;
end ; // NextToken

function EmailValidator( EmailAddress : string ) : boolean ;
var EmailToken : string ;
Token : TokenType ;
State : integer ;
begin

result := false;

EmailAddress := trim(EmailAddress);
if EmailAddress="" then exit;
State := 0 ;
while ( State <> 100 ) do
begin
Token := NextToken( EmailAddress, EmailToken ) ;
case State of
-1 : begin
Result := false ;
State := 100 ;
end ;

0 : case Token of
TK_STR : State := 1 ;
else
State := -1 ;
end ;

1 : case Token of
TK_PERIOD : State := 0 ;
TK_AT : State := 2 ;
else
State := -1 ;
end ;

2 : case Token of
TK_STR : State := 3 ;
TK_EOEA : State := 99 ; //osi: 123@yahoo now is walid
else
State := -1 ;
end ;

3 : case Token of
TK_PERIOD : State := 4 ;
TK_EOEA : State := 99 ;
else
State := -1 ;
end ;

4 : case Token of
TK_STR : State := 5 ;
else
State := -1 ;
end ;

5 : case Token of
TK_PERIOD : State := 4 ;
TK_EOEA : State := 99 ;
else
State := -1 ;
end ;
99 : begin
Result := true ;
State := 100 ;
end ;
end ;
end ;
end ; // EmailValidator


Зы - а почти 100 проц. контроль - пошли мыло по адресу..


 
Прохожий ©   (2003-07-22 10:58) [4]

ага, попробую


 
___Nikolay ©   (2003-07-22 11:47) [5]

function IsValidEmail(const Value:string):boolean;
function CheckAllowed(const s:string):boolean;
var
i: integer;
begin
Result:= false;
for i:= 1 to Length(s) do
begin
if not (s[i] in ["a".."z", "A".."Z", "0".."9", "_", "-", "."]) then
Exit;
end;
Result:= true;
end;
var
i: integer;
namePart, serverPart: string;
begin
Result:= false;
i:= Pos("@", Value);
if i = 0 then
Exit;
namePart:= Copy(Value, 1, i - 1);
serverPart:= Copy(Value, i + 1, Length(Value));
if (Length(namePart) = 0) or ((Length(serverPart) < 5)) then
Exit;
i:= Pos(".", serverPart);
if (i = 0) or (i > (Length(serverPart) - 2)) then
Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;


 
Sherbacov ©   (2003-07-22 18:05) [6]

В FAQ посмотрю.



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
3-10081
Alfred77777
2003-07-11 14:33
2003.08.04
Не получается вывести таблицу в режим редактирования


14-10444
BnT
2003-07-17 21:27
2003.08.04
---|Ветка была без названия|---


8-10311
Opera
2003-04-08 22:26
2003.08.04
Плеер


9-10073
Runner
2003-02-05 20:32
2003.08.04
Если я программист на Assembler’e ?


14-10455
gn
2003-07-18 09:11
2003.08.04
НаШи РуЛяТ УрА!!!!!!!!!!!!!!!!!!!!!!!!!!!