C++ 判斷是否為郵箱格式


總結了一下合法的email地址格式如下:
  1. 首字符必須用字母,而且其它的字符只能用26個大小寫字母、0~9及_-.@符號
  2. 必須包含一個並且只有一個符號“@”
  3. @后必須包含至少一個至多三個符號“.”
  4. 第一個字符不得是“@”或者“.”(第一步已檢查過了)
  5. 不允許出現“@.”或者.@
  6. 結尾不得是字符“@”或者“.”
  現在就把本人寫的代碼發布出來給大家做參考。以下代碼在VS2005(UNICODE)中測試通過,應該來說基本滿足大部分的驗證需求:
  //檢查字符的有效性,包括26個大小寫字母、0~9及_-.@符號
 bool JCLoginGameLayer::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;
}
bool JCLoginGameLayer::IsValidEmail(string strEmail)
{
if( strEmail.length()<5 ) //26個小寫字母
return false;

char ch = strEmail[0];
if( ((ch>=97) && (ch<=122)) || ((ch>=65) && (ch<=90)) )
{
int atCount =0;
int atPos = 0;
int dotCount = 0;
for(int i=1;i<strEmail.length();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. 不允許出現“@.”或者.@
int x,y;
x=strEmail.find("@.");
y=strEmail.find(".@");
if( x>0 || y>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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM