用Delphi判断email地址的合法性应该如何写呀!!!
解决方案 »
- delphi操作XML
- 一个与DLL相关的奇怪现象
- 如何在繁體操作系統的客戶端顯示存放在數據庫中的簡體中文?
- 头大了~~~~寻求一组件:中式的表格组件~
- 在线等待你的光临!请进入,关于reportmachine
- 使用TMediaPlayer进行录音,在录音的同时如何对声音进行处理
- 问一个关于treeview的问题??很急的.马上结帐
- 为什么AdoDataSet不能Close?
- 请教如何使用SELECT 语句在*.DB的表中显示行号:例如select rowid,field1,fiels2...
- Delphi 5.0增加了那些功能?
- 奇怪的问题,关于ActiveForm 不能发布的问题
- 如何将程序中不同form中录入的参数生成一个报表并打印?
if pos('.',strEmail)<>0 then///////////判断.
if pos('_',strEmail)<>0 then///////////判断_
begin
if AnsiPos('@',mail)>3 then
if AnsiPos('.',mail)>5 then
begin
result:=true;
exit;
end; result:=false;
end;
这段代码判断不完善高手在修改一下呀!!
begin
if pos('@',mail)>1 then //@前至少得有一个字符
begin
mail := Copy(mail,pos(@,mail),length(mail));
if (length(mail)-pos('',mail)>5) then //@后至少5个字符
if (length(mail)-pos('.',mail)>3) then //.后面至少两个字符.com.cn /.com
begin
Result := True;
exit;
end;//end if
end;//end if
Result := false;
end;//end pro
begin
if pos('@',mail)>1 then //@前至少得有一个字符
begin
mail := Copy(mail,pos(@,mail),length(mail));
if pose('@',mail)=0 then
if (length(mail)-pos('',mail)>5) then //@后至少5个字符
if (length(mail)-pos('.',mail)>3) then //.后面至少两个字符.com.cn /.com
begin
Result := True;
exit;
end;//end if
end;//end if
Result := false;
end;//end pro
Function IsEmail(mail:String):bool;
begin
if pos('@',mail)>1 then //@前至少得有一个字符
begin
mail := Copy(mail,pos(@,mail),length(mail));
if pos('@',mail)=1 then
if (length(mail)-pos('',mail)>5) then //@后至少5个字符
if (length(mail)-pos('.',mail)>3) then //.后面至少两个字符.com.cn /.com
begin
Result := True;
exit;
end;//end if
end;//end if
Result := false;
end;//end pro
然后一个一个字符判断了
var
Number,I:integer; //Number用于给字符'@'计数
TempStr:String;
begin
TempStr:=EmailAddr;
Number:=0;
for I:=1 to Length(TempStr) do
begin
if (TempStr [I]='@') then
INC(Number);
end;
if ((Number =0)or(Number >1)) then
Result:=False//如果不含有字符'@',或者其个数大于1,则不合法
else
begin
if ((TempStr [1]='@')or (TempStr [length(TempStr)]='@')) then
Result:=False//如果字符'@'的位置在字符串开头或者末尾,则不合法
else
begin
I:=pos('@',TempStr);//获取字符'@'在字符串当中的位置
delete(TempStr,1,I);//获取字符串中字符'@'后面的剩余子串
if (Length(TempStr)<3) then
Result:=False //如果剩余子串的长度小于3,则不合法
else
begin
if ((pos('.',TempStr)=0)or(pos('.',TempStr)=length(TempStr))
or (pos('.',TempStr)=1))then
Result:=False//如果剩余的子串当中不含有字符'.',或者其位置在//子串的开头或者末尾,则不合法
else
Result:=True; //以上的判断都通过,则表示地址字符串为合法
end;
end;
end;
end;
function IsValidEmail(const email: string): boolean;
var
i: integer;
eTmp, namePart, serverPart: string; function CheckAllowed(const s: string): boolean; //字符是否合法
var
i: integer;
begin
Result:= false;
for i:= 1 to Length(s) do
if not (s[i] in ['a'..'z','0'..'9','_','-','.']) then Exit;
Result:= true;
end;
begin
eTmp := LowerCase(email);
Result:= false;
i:= Pos('@', eTmp);
if (i = 0) or (pos('.',eTmp)=0) or (pos('..',eTmp)>0) then Exit;
namePart:= Copy(eTmp, 1, i-1);
serverPart:= Copy(eTmp, i+1, Length(eTmp));
if (Length(namePart)=0) or ((Length(serverPart) < 4)) then Exit;
i := Pos('.', serverPart);
if (i = 0) or (i >= (Length(serverPart) - 2)) then Exit;
Result:= CheckAllowed(namePart) and CheckAllowed(serverPart);
end;方法二,比较简单,但必须用TRegExpr(正则表达式):
表达式字串为:'^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$'