检查输入参数是否为合法的email地址

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;
}

你可能感兴趣的:(基础知识)