正則&轉義字符&特殊字符


正則

正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。

由於正則表達式主要應用對象是文本,因此它在各種文本編輯器場合都有應用,小到著名編輯器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");

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM