function CheckEmail(str){
var CHAR_LETTER_NUMERIC=1;
var CHAR_UNDERLINE=2;
var CHAR_DOT=3;
var CHAR_AT=4;
var CHAR_DIVIDE=5;
var CHAR_END=6;
var CHAR_OTHER=7;
var DIV_CHAR=',';
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
return rc;
} else if(str.length==0){
rc=true;
return rc;
}
var exit_flag=false;
var total_char=str.length;
var pos=0;
var cur_char;
var cur_status=0;
while((pos<=total_char) && (!exit_flag)){
if(pos==total_char){
cur_char=CHAR_END;
}
else if (str.charAt(pos)=='.'){
cur_char=CHAR_DOT;
}
else if (str.charAt(pos)==DIV_CHAR){
cur_char=CHAR_DIVIDE;
}
else if(str.charAt(pos)=='_'){
cur_char=CHAR_UNDERLINE;
}
else if(str.charAt(pos)=='@'){
cur_char=CHAR_AT;
}
else if(((str.charAt(pos)>='a')&&(str.charAt(pos)<='z'))||((str.charAt(pos)>='A')&&(str.charAt(pos)<='Z'))||((str.charAt(pos)>='0')&&(str.charAt(pos)<='9'))||(str.charAt(pos)=='-')){
cur_char=CHAR_LETTER_NUMERIC;
}
else{
cur_char=CHAR_OTHER;
}
switch (cur_status){
case -1://error
rc=false;
exit_flag=true;
break;
case 0://初始状态
if((cur_char==CHAR_LETTER_NUMERIC)||(cur_char==CHAR_UNDERLINE)||(cur_char==CHAR_DOT)){
cur_status=1;
}
else{
rc=false;
cur_status=-1;
}
break;
case 1://用户名
if((cur_char==CHAR_LETTER_NUMERIC)||(cur_char==CHAR_UNDERLINE)||(cur_char==CHAR_DOT)){
cur_status=1;
}
else if(cur_char==CHAR_AT){
cur_status=2;
}
else{
rc=false;
cur_status=-1;
}
break;
case 2://@
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=6;
}
else{
rc=false;
cur_status=-1;
}
break;
case 6://"."
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=6;
}
else if(cur_char==CHAR_DOT){
cur_status=3;
}
else{
rc=false;
cur_status=-1;
}
break;
case 3://fisrt domain name
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=4;
}
else{
rc=false;
cur_status=-1;
}
break;
case 4://not first domain name
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=4;
}
else if(cur_char==CHAR_DOT){
cur_status=3;
}
else if(cur_char==CHAR_DIVIDE){
cur_status=0;
}
else if(cur_char==CHAR_END){
cur_status=5;
}
else{
rc=false;
cur_status=-1;
}
break;
case 5://ok
rc=true;
exit_flag=true;
break;
default:
rc=false;
exit_flag=true;
break;
}
pos++;
}
return rc;
}