1. 程式人生 > >手機號碼、郵箱匹配正則表示式java實現練手

手機號碼、郵箱匹配正則表示式java實現練手

概念:正則表示式就是用某種模式去匹配一類字串的一個公式。它由一些普通字元和一些元字元(metacharacters)組成。普通字元包括大小寫的字母和數字,而元字元則具有特殊的含義。
正則表示式的基礎語法為: “^([]{})([]{})([]{})$”。
大致意思是:正則字串 = “開始([包含內容]{長度})([包含內容]{長度})([包含內容]{長度})結束”。 今天我學習了一下簡單的基礎知識,嘗試寫一下手機號碼和郵箱的正則匹配練習一下。

一、手機號碼正則表示式:
手機號碼一般為1開頭11位數字,其正則匹配表示式可為:1[0-9]{10}
[0-9]表示0到9之間任意一個數字(也可以用\d表示),{10}表示前面的表示式匹配10次;java字串匹配時增加表達開始和結束的元字元^$.
Java程式碼測試如下:

/** 
     * 判斷是否為正確的手機格式
     * @param str 
     * @return boolean 
     */ 
    public static boolean isMobile0(String str){
         if(str == null || "".equals(str)){  
               return false;
            }
            return str.matches("^1[0-9]{10}$");  

    }
    public static void main (String[] str){
      String mobile = "12345678901"
; boolean y = isMobile0(mobile); System.out.println(y); }

執行結果為:true
這裡主要數字串滿足1開頭11為數字即可,存在比較大的匹配隱患。

進階1:國內的手機號碼開頭號碼段有以下:
移動號碼段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
聯通號碼段:130、131、132、136、185、186、145
電訊號碼段:133、153、180、189
即開頭為13|14|15|18四種,|表示或的意思;再細緻一些則有(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]),Java程式碼測試如下:

  /** 
     * 判斷是否為正確的手機格式
     * @param str 
     * @return boolean 
     */ 
    public static boolean isMobile0(String str){
         if(str == null || "".equals(str)){  
               return false;
            }
         //return str.matches("^1[0-9]{10}$");
         //return str.matches("^1\\d{10}$");
         //return str.matches("^(13|14|15|18)\\d{9}$");  
         //return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$");  
         return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");

    }
    public static void main (String[] str){
      String mobile = "12345678901";
      String mobile2 = "13660188000";
      boolean n = isMobile0(mobile);
      System.out.println(n);
      boolean y = isMobile0(mobile2);
      System.out.println(y);

   }

返回結果為:false true;
第一個String欄位因為號段不對被篩選出來了。

進階2:增加了國字區號,比如我國+86的號碼如何判斷
在原有的基礎前面,增加+86或86的判斷,用?表示匹配一次或0次

   /** 
     * 判斷是否為正確的手機格式
     * @param str 
     * @return boolean 
     */ 
    public static boolean isMobile0(String str){
         if(str == null || "".equals(str)){  
               return false;
            }
         //return str.matches("^1[0-9]{10}$");
         //return str.matches("^1\\d{10}$");
         //return str.matches("^(13|14|15|18)\\d{9}$");  
         //return str.matches("^((13[0-9])|(14[5|7])|(15[0-3])|(15[5-9])|(18[0,5-9]))\\d{8}$");  
         //return str.matches("^1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");
         return str.matches("^(\\+86|86)?1((3[0-9])|(4[5|7])|(5([0-3]|[5-9]))|(8[0,5-9]))\\d{8}$");

    }
    public static void main (String[] str){
      String mobile = "12345678901";
      String mobile2 = "13660188000";
      String mobile3 = "+8613660188000";
      String mobile4 = "8613660188000";
      System.out.println(isMobile0(mobile));
      System.out.println(isMobile0(mobile2));
      System.out.println(isMobile0(mobile3));
      System.out.println(isMobile0(mobile4));     
   }

測試結果為:false true true true;

二、手機號碼正則表示式
郵箱正常格式為:使用者名稱@域名;

使用者名稱分析:使用者名稱一般由英文字母,中劃線,下劃線,數字等組成,由此確定正則表示式可為[0-9a-zA-Z-_]+;
而正則表示式有\w可用於匹配包括下劃線的單詞字元,即\w 等價於 [0-9a-zA-Z_],上式可以表達為 [\w-](java中要注意轉義);

域名分析:國際規定域名格式[N級域名][三級域名.]二級域名.頂級域名;至少有兩級域名;而域名的表達也可以用[\w-]表示。
那麼郵箱的匹配正則表示式可為:^[\w-][email protected][\w-]+([.][\w-]+)+$
考慮轉義字元等,在java中的實現和測試是:

    /** 
     * 判斷是否為正確的郵件格式 
     * @param str 
     * @return boolean 
     */  
    public static boolean isEmail(String str){  
        if(str == null || "".equals(str)){  
            return false;
         }
        return str.matches("^[\\w-][email protected][\\w-]+(\\.[\\w-]+)+$");  
    }  

    public static void main (String[] str){
         String email1 = "[email protected]";
         String email2 = "[email protected]";
         System.out.println(isEmail(email1));
         System.out.println(isEmail(email2));
   }

結果返回 true false

相關推薦

手機號碼郵箱匹配表示式java實現

概念:正則表示式就是用某種模式去匹配一類字串的一個公式。它由一些普通字元和一些元字元(metacharacters)組成。普通字元包括大小寫的字母和數字,而元字元則具有特殊的含義。 正則表示式的基礎語法為: “^([]{})([]{})([]{})$”。

String動態規劃——表示式匹配

public class Solution { public boolean isMatch(String s, String p) { if(s == null||p == null) return false; boolean [][]fla

swift 機號郵箱網址等表示式驗證

import Foundation enum Validate { case email(_: String) case phoneNum(_: String) case carNum(_: String) case username(_: String) case

港澳臺大陸身份證表示式

var patternMainLand = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/;//大陸 var patternHongkong = /^((\s?[A-Za-z])|([A-Za-z

mysql表示式實現多個欄位匹配多個like模糊查詢

現在有這麼一個需求 一個questions表,欄位有題目(TestSubject),選項(AnswerA,AnswerB,AnswerC,AnswerD,AnswerE) 要求欄位不包含png,jpg,jpeg,gif  正常情況下會這麼寫 select * from questions

python處理異常日誌以及表示式

異常捕獲 高階語言通常都內建了一套try…except…finally…的錯誤處理機制,Python也不例外。而且只要在合適的層次去捕獲錯誤就可以了。 def foo(s): return 10 / int(s) def bar(s):

2018最新版 機號驗證碼表示式 jq + 小程式

HTML: <!-- 表單 --> <input class="weui-input" id="tel" type="tel" placeholder="請輸入手機號"> <input class="weui-input" t

js驗證郵箱表示式

最近小小研究了一下正則表示式,覺得寫正則表示式還挺有意思的。 今天想自己試著寫一下郵箱驗證,這個其實網上已經很氾濫了,而且各種版本,各種不一樣,我按照自己的理解寫了一個。 首先要先分析一下郵箱格式:第一部分 @ 第二部分(域名) 第一部分:1.只能以數字或字母開頭    

註冊登入——前端後臺驗證(表示式)

註冊 介面如圖 前端驗證 html頁面程式碼 <form id="form_reg"> <div> <input type

常用js限制輸入常用js表示式

不允許輸入空格 onkeyup="this.value=this.value.replace(/\s+/g,'')" 只允許輸入數字 onkeyup="this.value=this.value.re

php郵箱驗證表示式

class isEmail{         public function run($email){                 if(ereg("^([a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+(.[a-zA

java 技巧 去除字串中的空格回車換行符製表符(表示式

import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringUtils { public static String replaceBlank(String

驗證郵箱表示式

程式碼使用方法: fuchangxi的正則:             /^([a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/ 開始必須是一個或者多個單詞字元或者是-,加上@,然後

表示式簡單實現郵箱登陸註冊等功能

前言 正則表示式(Regular Expression)作為在許多語言中都存在的邏輯表示式。被廣泛應用在檢索、替換等對文字進行操作的功能實現中。比起復雜的for迴圈和if的巢狀,正則表示式則更加簡潔高效,但是它的缺點也在這兒,由於過於符號化,正則表示式往

python爬蟲裡資訊提取的核心方法: BeautifulsoupXpath和表示式

20170531 這幾天重新拾起了爬蟲,算起來有將近5個月不碰python爬蟲了。 對照著網上的程式和自己以前寫的抓圖的程式進行了重寫,發現了很多問題。總結和歸納和提高學習效果的有效手段,因此對於這些問題做個歸納和總結,一方面總結學習成果,使之成為自己的東西,另一方面

最新郵箱匹配郵箱字首可包含"_")

/** * 校驗郵箱格式 * * @param email * @return * @author shijing * 2015年11月10日下午6:17:59 */ p

郵箱表示式詳解

常用正則表示式—郵箱(Email) 本文針對有一點正則基礎的同學,如果你對正則一無所知,請移步“正則表示式30分鐘入門教程”學習。 要驗證一個字串是否為郵箱的話,首先要了解郵箱賬號的格式。我嘗試過在網上找出一個標準的格式,但是很遺憾我沒有找到。我也嘗試使用RFC標準來判斷郵箱的格式,但是也沒有結果。網上些部落

js驗證郵箱格式-表示式

//js定義此函式直接傳參呼叫即可。 function fChkMail(emailAddress){ var reg = new RegExp("^[a-z0-9]+([._\

javascript match()函式匹配表示式時的返回值問題

語法 stringObject.match(regexp)返回值 返回匹配結果的陣列。該陣列的內容依賴於 regexp 是否具有全域性標誌 g。 如果 regexp 沒有標誌 g,那麼 match() 方法就只能在 stringObject 中執行一次匹配。如果沒有找到任何

表示式 - - java.util.regex 包 (二)

java.util.regex 包主要包括以下三個類: Pattern 類: pattern 物件是一個正則表示式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 物件,你必須首先呼叫其公共靜態編譯方法,它返回一個 Pattern 物件。該方法接受一個正則表示式