用VC验证EMAIL有效性计算机等级考试
文章作者 100test 发表时间 2009:07:08 02:56:37
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
最近编写的一个软件中需要验证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) //[email protected]
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("[email protected]")). 返回TRUE
IsValidEmail(_T("[email protected]")). 返回FALSE
IsValidEmail(_T("[email protected]")). 返回FALSE
IsValidEmail(_T("[email protected]")). 返回TRUE
IsValidEmail(_T("[email protected]")). 返回TRUE
IsValidEmail(_T("[email protected]")). 返回FALSE
IsValidEmail(_T([email protected])). 返回FALSE