正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
由於正則表達式主要應用對象是文本,因此它在各種文本編輯器場合都有應用,小到著名編輯器EditPlus,大到Microsoft Word、Visual Studio等大型編輯器,都可以使用正則表達式來處理文本內容。
手機,身份證,郵箱正則常見案例
手機:/(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/ 郵箱:/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/ 第一代 身份證:/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$/ 第二代身份證: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
構造函數方式
var reg=new RegExp("study","ig");
常量方式
var reg=/study/ 等價於var reg= new RegExp("study");
屬性
global RegExp對象是否具有標志 g。 全局 ignoreCase RegExp對象是否具有標志 i。 忽略大小寫 source 正則表達式的源文本。 Multiline RegExp 對象是否具有標志 m。 不只匹配一行。
方法
exec(字符串) 檢索字符串中指定的值。返回找到的值,如果沒有匹配到,則返回null。 test (字符串) 檢索字符串中指定的值。返回 true 或 false。
使用RegExp對象的字符串函數
var pattern = /good/ig; //全局搜索 var str = 'good good study!,day day up!'; 1,使用 match 方法獲取獲取匹配數組a alert(str.match(pattern)); //匹配到兩個 good,good 2,使用 search 來查找匹配數據 alert(str.search(pattern)); //查找到返回位置,否則返回-1 3,使用 replace 替換匹配到的數據(找到並替換) alert(str.replace(pattern, 'hard')); //將Good替換成了hard 4,使用 split 拆分成字符串數組, var arr = str.split(pattern); //將按空格拆開字符串成數組
特殊字符
^ 匹配一行的開頭,/^a/匹配"abc",而不匹配“bca“ $ 匹配一行的結尾,/a$/匹配“bca",而不匹配"abc" . 匹配單個字符,除了換行和行結束符,等價於[^\n] * 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa + 匹配前面元字符1次或多次,/ba+/將匹配ba,baa,baaa ? 匹配前面元字符0次或1次,/ba?/將匹配b,ba x|y 匹配x或y ,/a|b/ 將匹配只要出現a或者b的字符串,不含a與b的不匹配 {n} 精確匹配n次 ,/d{4}/ 將匹配,出現連續4個d的字符串 {n,} 匹配n次以上 ,/d{4,}/將匹配,出現連續4個及其以上多個d的字符串 {n,m} 匹配n-m次,/d{4,6}/將匹配,出現連續4到6個d的字符串 [xyz] 匹配這個集合中的任一一個字符,如:[a-z] 表示小寫a到小寫z范圍的字符。 [^xyz] 不匹配這個集合的任何一個字符 ,同樣可以寫范圍,如:[^a-z] (red|blue|green) 將一些正則匹配規則合成一個小組。 \d 匹配一個數字字符,/\d/ 等價於 /[0-9]/ \D 匹配一個非數字字符,/\D/ 等價於 /[^0-9]/ \w 匹配一個可以組成單詞(變量)的字符(包括字母,數字,下划線)等價於[a-zA-Z0-9_] \W 匹配一個不可以組成單詞的字符 \n 匹配一個換行符 \f 匹配換頁符。 \r 匹配一個回車符 \t 匹配一個制表符 \v 匹配一個重直制表符 \s 匹配一個空白字符,包括\n,\r,\f,\t,\v等 \S 匹配一個非空白字符,等於/[^\n\f\r\t\v]/ \b 匹配一個單詞的邊界 (單詞是以空格分割的) \B 匹配一個單詞的非邊界 \0 匹配NUL 字符。 \ddd 匹配以八進制數 ddd 規定的字符。 Ru:var reg = /\141/; 等價於 var reg = /a/; \xdd 匹配以十六進制數 dd 規定的字符。 \uxxxx 匹配以十六進制數 xxxx 規定的 Unicode 字符。
直接量字符(轉義字符)
\f 換頁符 \n 換行符 \r 回車 \t 制表符 \v 垂直制表符 \/ 一個 / 直接量 \\ 一個 \ 直接量 \. 一個 . 直接量 \* 一個 * 直接量 \+ 一個 + 直接量 \? 一個 ? 直接量 \| 一個 | 直接量 \( 一個 ( 直接量 \) 一個 ) 直接量 \[ 一個 [ 直接量 \] 一個 ] 直接量 \{ 一個 { 直接量 \} 一個 } 直接量 \- 一個-直接量
量詞
c{n} 匹配包含 n 個 c 的序列的字符串。 c{m,n} 匹配包含 m 到 n 個 c 的序列的字符串。 c{n,} 匹配包含至少 n 個 c 的序列的字符串。 c+ 匹配任何包含至少一個 c 的字符串,等價於c{1,} 。 c* 匹配任何包含零個或多個 c 的字符串,等價於c{0,} c? 匹配任何包含零個或一個 c 的字符串,等價於 c{0, 1} c$ 匹配任何結尾為 c 的字符串。 ^c 匹配任何開頭為 c 的字符串。 ?=c 匹配任何其后緊接指定字符串 c 的字符串。 對其后緊跟 "all" 的 "is" 進行全局搜索. var str="Is this all there is"; var patt1=/is(?= all)/g; ?!c 匹配任何其后沒有緊接指定字符串 c 的字符串。 對其后沒有緊跟 "all" 的 "is" 進行全局搜索: var str="Is this all there is"; var patt1=/is(?! all)/gi;
正則封裝
function checkAll(type,value){ //type是你要驗證的類型(自定),value驗證該值 switch(type) { //判斷該類型 case 'Phone': //如果類型是Phone的話,就執行下面的判斷 if((/^1[34578]\d{9}$/.test(value))){ return true; }else{ return false; } break; case 'Email': if(!(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value))){ return false; }else{ return true; } break; } }