用Delphi判断email地址的合法性应该如何写呀!!!

解决方案 »

  1.   

    if pos('@',strEmail)<>0 then///////////判断@
    if pos('.',strEmail)<>0 then///////////判断.
    if pos('_',strEmail)<>0 then///////////判断_
      

  2.   

    @前面有"."也是正常的啊...,比如[email protected]就是正常的判断域名,不如直接把@后面的取下来看能不能解析好了,,这样应该比较准,但比较慢且耗资源
      

  3.   

    function IsEmail(mail:ansiString):bool;
    begin
      if AnsiPos('@',mail)>3 then
         if AnsiPos('.',mail)>5 then
           begin
              result:=true;
              exit;
            end;   result:=false; 
    end;
    这段代码判断不完善高手在修改一下呀!!
      

  4.   

    Function IsEmail(mail:String):bool;
    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
      

  5.   

    Function IsEmail(mail:String):bool;
    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
      

  6.   

    //不好意思上面写错了
    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
      

  7.   

    呵呵,看来要先mail := Copy(mail,pos(@,mail),length(mail));
    然后一个一个字符判断了
      

  8.   

    function IsVaildEmailAddr(EmailAddr:String):boolean;
    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;
      

  9.   

    两个方法,方法一,比较复杂:
    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]+$'
      

  10.   

    呵呵,强大的就使用RegExpr的证则表达式吧http://lysoft.7u7.net