俊星的BLOG

          JAVA MAIL之email地址處理

          對于email地址的定義,可以參考RFC822,里面有詳細的說明。
          1、采用正則表達式的方式來驗證email地址:
          JS處理方式(來自javascript.internet.com的Sandeep V. Tamhankar):

          function checkEmail(emailStr) {
             
          if (emailStr.length == 0{
                 
          return true;
             }


              
          var emailPat=/^(.+)@(.+)$/;
              
          // \(\)<>@,;:\\\"\.\[\]
              var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
              // [^\s\(\)<>@,;:\\\
          "\.\[\]]
              
          var validChars="\[^\\s" + specialChars + "\]"
              
          //("[^"]*")
              var quotedUser="(\"[^\"]*\")"
              var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
              // [^\s\(\)<>@,;:\\\
          "\.\[\]]+
              
          var atom=validChars + '+'; 
              
          // ([^\s\(\)<>@,;:\\\"\.\[\]]+|("[^"]*"))
              var word="(" + atom + "|" + quotedUser + ")"
              
          //^([^\s\(\)<>@,;:\\\"\.\[\]]+|("[^"]*"))(\.([^\s\(\)<>@,;:\\\"\.\[\]]+|("[^"]*")))*$
              var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); 
              
          // ^([^\s\(\)<>@,;:\\\"\.\[\]]+|("[^"]*"))(\.([^\s\(\)<>@,;:\\\"\.\[\]]+|("[^"]*")))*$
              var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
              

              
          var matchArray=emailStr.match(emailPat);
             
          if (matchArray == null{
                 
          return false;
             }

             
          var user=matchArray[1];
             
          var domain=matchArray[2];
             
          if (user.match(userPat) == null{
                 
          return false;
             }

             
          var IPArray = domain.match(ipDomainPat);
             
          if (IPArray != null{
                 
          for (var i = 1; i <= 4; i++{
                    
          if (IPArray[i] > 255{
                       
          return false;
                    }

                 }

                 
          return true;
             }

             
          var domainArray=domain.match(domainPat);
             
          if (domainArray == null{
                 
          return false;
             }

             
          var atomPat=new RegExp(atom,"g");
             
          var domArr=domain.match(atomPat);
             
          var len=domArr.length;
             
          if ((domArr[domArr.length-1].length < 2||
                 (domArr[domArr.length
          -1].length > 3)) {
                 
          return false;
             }

             
          if (len < 2{
                 
          return false;
             }

             
          return true;
          }

          下面是我的java實現:

              public static String SPECIAL_CHARS = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
              public static String VALID_CHARS = "[^\\s" + SPECIAL_CHARS + "]";
              
          public static String QUOTED_USER = "(\"[^\"]*\")";
              public static String ATOM = VALID_CHARS + "+";
              
          public static String WORD = "(" + ATOM + "|" + QUOTED_USER + ")";

              
          public static String EMAIL_PATTERN = "^(.+)@(.+)$";
              
          public static String IP_DOMAIN_PATTERN = "^(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).(\\d{1,3})$";
              
          public static String USER_PATTERN = "^" + WORD + "(\\." + WORD + ")*$";
              
          public static String DOMAIN_PATTERN = "^" + ATOM + "(\\." + ATOM + ")*$";
              
          public static String LEGAL_ASCII_PATTERN = "^[\\0000-\\0177]+$";

              
          public static String SINGLE_EMAIL_PATTERN = "(" + ATOM + "(\\." + ATOM + ")*@" + ATOM
                      
          + "(\\." + ATOM + ")*)";

              
          public static boolean isValid(String input) {
                  
          if (input == null{
                      
          return false;
                  }

                  
          if (!Pattern.matches(LEGAL_ASCII_PATTERN, input)) {
                      
          return false;
                  }

                  Matcher email 
          = Pattern.compile(EMAIL_PATTERN).matcher(input);
                  
          if (!email.matches()) {
                      
          return false;
                  }

                  
          if (!Pattern.matches(USER_PATTERN, email.group(1))) {
                      
          return false;
                  }

                  String domain 
          = email.group(2);
                  Matcher ips 
          = Pattern.compile(IP_DOMAIN_PATTERN).matcher(domain);
                  
          if (ips.matches()) {
                      
          for (int i = 1; i <= 4; i++{
                          
          if (Integer.parseInt(ips.group(i)) > 255{
                              
          return false;
                          }

                      }

                      
          return true;
                  }

                  
          if (!Pattern.matches(DOMAIN_PATTERN, domain)) {
                      
          return false;
                  }

                  
          return true;

              }


              
          public static void main(String[] args) {
                  List
          <String> list = new ArrayList<String>();
                  list.add(
          "test@test.com");
                  list.add(
          "te%$#st@test.com");
                  list.add(
          "test@127.0.0.1");
                  list.add(
          "test@127.258.0.1");
                  list.add(
          "te我的家@test.com test2@test.com");
                  list.add(
          "Alfred.Neuman@BBN-TENEXA");
                  list.add(
          "\"George,Ted\"@Group.Arpanet");
                  list.add(
          "Wilt(the Stilt)Chamberlain@NBA.US goodjob@test.com");
                  
          for (String str : list) {
                      System.out.println(isValid(str));
                  }

                  System.out.println();

                  
          // 從輸入字符串中提取電子郵件地址
                  Pattern ascill = Pattern.compile(LEGAL_ASCII_PATTERN);
                  Pattern p 
          = Pattern.compile(SINGLE_EMAIL_PATTERN);
                  Matcher m 
          = p.matcher("");
                  String temp 
          = null;
                  
          for (String str : list) {
                      m.reset(str);
                      
          while (m.find()) {
                          temp 
          = m.group();
                          
          if (ascill.matcher(temp).matches()) {
                              System.out.println(temp);
                          }

                      }

                  }

              }

          運行結果:

          true
          true
          true
          false
          false
          true
          true
          false

          test@test.com
          te
          %$#st@test.com
          test@
          127.0.0.1
          test@
          127.258.0.1
          test2@test.com
          Alfred.Neuman@BBN
          -TENEXA
          Chamberlain@NBA.US
          goodjob@test.com

           

          posted on 2009-04-23 21:16 俊星 閱讀(681) 評論(0)  編輯  收藏 所屬分類: 代碼庫

          主站蜘蛛池模板: 广灵县| 航空| 尚义县| 英山县| 商水县| 城口县| 体育| 介休市| 洛隆县| 甘谷县| 盐山县| 钟祥市| 金昌市| 河池市| 宁远县| 肇源县| 商南县| 芜湖县| 晋江市| 且末县| 平潭县| 那坡县| 平阳县| 明溪县| 密山市| 札达县| 太湖县| 阿坝县| 黎川县| 土默特右旗| 双峰县| 聊城市| 张家港市| 阿坝县| 遵化市| 旅游| 鄄城县| 衡南县| 温泉县| 额敏县| 吉林省|