用VC验证EMAIL有效性

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  考试大教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛
  最近编写的一个软件中需要验证EMAIL有效性,本以为网络上应该到处都是,没想到google上一查,绝大部分都是ASP或JavaScript的代码,VC或Delphi的代码几乎没有。没办法,只好跟据别人写的ASP代码以及大部分人的一些验证方面经验自已写了。
  总结了一下合法的email地址格式如下(只是大致上的判断,希望大家能不断的充实或有更好的想法):
  1. 首字符必须用字母,而且其它的字符只能用26个大小写字母、0~9及_-.@符号
  2. 必须包含一个并且只有一个符号“@”
  3. @后必须包含至少一个至多三个符号“.”
  4. 第一个字符不得是“@”或者“.”(第一步已检查过了)
  5. 不允许出现“@.”或者.@
  6. 结尾不得是字符“@”或者“.”
  现在就把本人写的代码发布出来给大家做参考。以下代码在VS2005(UNICODE)中测试通过,应该来说基本满足大部分的验证需求:
  //检查字符的有效性,包括26个大小写字母、0~9及_-.@符号
  BOOL IsValidChar(char ch)
  {
  if( (ch>=97) && (ch<=122) ) //26个小写字母
  return TRUE;
  if( (ch>=65) && (ch<=90) ) //26个大写字母
  return TRUE;
  if((ch>=48) && (ch<=57)) //0~9
  return TRUE;
  if( ch==95 || ch==45 || ch==46 || ch==64 ) //_-.@
  return TRUE;
  return FALSE;
  }
  //EMAIL有效性验证
  BOOL IsValidEmail(CString strEmail)
  {
  if(strEmail.GetLength()<5) //a@b.c
  return FALSE;
  char ch = strEmail[0];
  //1. 首字符必须用字母
  if( ((ch>=97) && (ch<=122)) || ((ch>=65) && (ch<=90)) )
  {
  int atCount =0;
  int atPos = 0;
  int dotCount = 0;
  for(int i=1;i<strEmail.GetLength();i++) //0已经判断过了,从1开始
  {
  ch = strEmail[i];
  if(IsValidChar(ch))
  {
  if(ch==64) //"@"
  {
  atCount ++;
  atPos = i;
  }
  else if( (atCount>0) && (ch==46) )//@符号后的"."号
  dotCount ++;
  }
  else
  return FALSE;
  }
  //6. 结尾不得是字符“@”或者“.”
  if( ch == 46 )
  return FALSE;
  //2. 必须包含一个并且只有一个符号“@”
  //3. @后必须包含至少一个至多三个符号“.”
  if( (atCount!=1) || (dotCount<1) || (dotCount>3) )
  return FALSE;
  //5. 不允许出现“@.”或者.@
  if( strEmail.Find(_T("@."))>0 || strEmail.Find(_T(".@"))>0 )
  return FALSE;
  return TRUE;
  }
  return FALSE;
  }
  测试结果:
  IsValidEmail(_T("abcd@hotmail.com")); 返回TRUE
  IsValidEmail(_T("_abcd@hotmail.com")); 返回FALSE
  IsValidEmail(_T("a.b.c.@abc.com")); 返回FALSE
  IsValidEmail(_T("a.b.c@abc.com")); 返回TRUE
  IsValidEmail(_T("abcd@hotmail.com.cn")); 返回TRUE
  IsValidEmail(_T("abcd@hotmail.com.cn.fj")); 返回FALSE
  IsValidEmail(_T(9abcd@hotmail.com.cn)); 返回FALSE

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答