1. 程式人生 > >js中正則表示式元字元不起作用的問題……

js中正則表示式元字元不起作用的問題……

今天在專案過程中發現一個問題,在網上拷的一段驗證日期的正則表示式在專案中不起作用,在很多線上測試正則表示式的網站上都做過測試,自己也讀了正則程式碼,就是看出來有什麼問題:

function checkInDate(inStrdate) {
    var regex = new RegExp("^(?:(?:(\d{4}(-|\/)(?:(?:0?[1,3-9]|1[0-2])(-|\/)(?:29|30)|((?:0?[13578]|1[02])(-|\/)31)))|(\d{4}(-|\/)(?:0?[1-9]|1[0-2])(-|\/)(?:0?[1-9]|1\d|2[0-8]))|(((?:(\d\d(?:0[48]|[2468][048]|[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))(-|\/)0?2(-|\/)29))))$");
    if (!regex.test(inStrdate)) {
        return false;
    }
    return true;
}

通過網上四處漫無目的的找資料以後,終於在斯達克裡面看到一條比較靠譜的解答

大概意思就是,在js中,正則表示式有兩種用法,一種是使用正則變數的方法來匹配字串,一種是用字串的方法來匹配正則表示式。

我這邊專案中使用的是第一種方法,正則變數方法匹配字串。

這種正則的使用方法在js中有兩種呼叫,分別叫做1、字面量模式;2、建構函式模式。

字面量模式:

var reg=/^\d+a/;

建構函式模式:

var reg = new RegExp("^\\d+a");

從上面我舉的兩個例子來看不難看出這兩種模式的區別……主要是在元字元的使用前,字面量模式下使用元字元可以直接呼叫,而建構函式模式下,需要先轉譯才能使用……

當然,如果在建構函式模式下覺得每次都轉譯會比較麻煩,也可以直接使用與元字元相對應的正則表示式,比如“\d”就直接使用“[0-9]”這樣子,只是我個人覺得還不如轉譯一下來得方便……

以上……

相關推薦

no