close

按此前往javascript完整教學目錄

 

 

字串的正規表示法(regular expreesion,或稱正則表達式)

javascript正規表示法PHP正規表示法有所不同。正規表示法的作用在於用來檢查字串是否符合此正規表示法,以便進行某些判斷。

正規表示法學習起來有點複雜,最好自己多寫、多做測試,才容易明白。

(1) 正規表示法由「敘述條件」、「首尾條件」、「附註條件」構成,而「敘述條件」、「首尾條件」被用 / 符號包住,「附註條件」則寫在 / 之外。

敘述條件」由至少一個的「形式條件」構成,而「形式條件」又由「字元條件」與「次數條件」構成。如:

 

未命名.bmp

註:[]內的條件可寫可不寫,但寫與不寫,造成的效果不同。

一個字串之中,只要有至少一個子字串符合「一個正規表示法中的所有條件」,我們就說「這個字串,通過了這個正規表示法的檢驗」,否則就是沒通過。

真正需要介紹的,是字元條件次數條件首尾條件附註條件以下僅只介紹常用的條件,若欲知道全部的條件,還是去查書吧

(2) 字元條件:字元條件的設定,是針對字串中的單一字元所用。字元條件可以是以下所列出的:

普通字元(也就是數字、文字、空白字元):數字是阿拉伯數字,文字可以是各國文字,包括英文和中文。

\符號:符號(比如. \ + ? { } ( ) [ ] = ! < > | 這些東西)要用脫逸字元 \ 加以區分。

[鍵盤字元一鍵盤字元二鍵盤字元三…]鍵盤字元可以是普通字元或者是/符號。這種寫法,表示字元條件是鍵盤字元一鍵盤字元二鍵盤字元三的聯集(鍵盤字元一鍵盤字元二鍵盤字元三中間並沒有用空白鍵分隔)。

如:

字元條件[ab3]表示:這個字元若是a或是b或是3,都代表通過此字元條件,如果不是a也不是b也不是3,就代表不通過此字元條件。

[a-z]:代表所有小寫英文字的聯集。相當於:[abcdefghijklmnopqrstuvwxyz]

[A-Z]:代表所有大寫英文字的聯集。相當於:[ABCDEFGHIJKLMNOPQRSTUVWXYZ]

[\u4e00-\u9fa5]代表所有中文字的聯集。

[0-9]:代表所有阿拉伯數字的聯集。相當於:[0123456789]

註:[a-z] [A-Z] [0-9]這三者之相互聯集也是存在的,如[a-zA-Z]代表大小寫英文字母的聯集,[0-9a-z]代表小寫英文字母和阿拉伯數字的聯集,[a-zA-Z0-9]代表大小寫英文字母和阿拉伯數字的聯集。

\w:代表大小寫英文字母和阿拉伯數字的聯集,相當於:[a-zA-Z0-9]

\d:代表所有阿拉伯數字的聯集。相當於:[0-9]

\s:空白字元。

[^鍵盤字元一鍵盤字元二鍵盤字元三…]鍵盤字元可以是普通字元或者是/符號。這種寫法,表示字元條件是鍵盤字元一鍵盤字元二鍵盤字元三取聯集之後的反集,也就是說,字元條件是:任何不是鍵盤字元一、也不是鍵盤字元二、也不是鍵盤字元三的字元。

如:

字元條件[^gh6]表示:這個字元只要不是g也不是h也不是6,都代表通過此字元條件。

\W:代表大小寫英文字母和阿拉伯數字的聯集的反集,相當於:[^a-zA-Z0-9]

\S:代表任何非空白字元。

(3) 次數條件:次數條件是接在字元條件之後,代表其前面的那個字元條件的「連續執行次數」的限制。次數條件可以是:

{n}n是非負整數,代表其前面的那個字元條件的「連續執行次數」等於n

{n,}n是非負整數,代表其前面的那個字元條件的「連續執行次數」大於或等於n

{n, m}nm是非負整數,代表其前面的那個字元條件的「連續執行次數」大於或等於n,且小於或等於m

*:相當於{0,}

+:相當於{1,}

註:次數條件可以不寫,若不寫,則預設相當於:{1}

(4) 首尾條件:首尾條件可用來幫敘述條件定位。首尾條件通常寫在敘述條件之外、/符號之內。首尾條件可為:

首條件 ^:在正規表示法中的範例為:

/^敘述條件一敘述條件二敘述條件三…/

表示在字串的開端,就要開始比對敘述條件一敘述條件二敘述條件三

尾條件 $:在正規表示法中的範例為:

/敘述條件一敘述條件二敘述條件三…$/

表示比對敘述條件一敘述條件二敘述條件三完成之後,必須是字串的尾端。

例如:

/^[A-Z][0-9]{9}$/ 是台式身分證格式的正規表示法。

/^[\u4e00-\u9fa5_a-zA-Z0-9]*$/ 表示字串中的所有字元,只能是中文、大小寫英文、數字或 _ 符號。通常用來讓使用者輸入某人事物的名稱。

(5) 附註條件:附註條件是在檢驗字串是否通過正規表示法時的設定。附註條件有三種:

i:檢驗時不區分大小寫,即是將[a-z][A-Z]視為相同。

m:多行檢驗模式。

g:在字串的成員函式match()replace()執行時才有作用。在(7)說明。

註:附註條件可以「寫在一起」,如:/^[A-Z][0-9]{9}$/img/^[A-Z][0-9]{9}$/mi/^[A-Z][0-9]{9}$/ig等等,這些格式都是可用的。

(6) 正規表示物件與其成員函式:正規表示物件,即是一個「帶有某種正規表示法」的物件,用來對字串進行作用。

javascript中,正規表示物件的宣告法為:

var 變數名稱 = RegExp( 正規表示法 ); 如:

var tt1 =RegExp(/^[A-Z][0-9]{9}$/ig);

正規表示物件的成員函式:正規表示物件的成員函式可用來對字串進行作用。常用的有:

(6-1) test(字串):檢驗字串是否通過該正規表示物件的正規表示法,若有則回傳true,否則回傳false。如:

var tt =/^[a-z]\w+\@com.tw$/;

var tt1=new RegExp(tt);

document.write(tt1.test("dpp772@com.tw"));    //顯示:true

document.write(tt1.test("julia66753@com.tw"));   //顯示:true

document.write(tt1.test("1pp772@com.tw"));   //顯示:false

document.write(tt1.test("DDD@com.tw"));     //顯示:false

document.write(tt1.test("dpp772@com.taiwan"));     //顯示:false

(6-2) exec(字串):若字串通過該正規表示物件的正規表示法,則回傳第一個被發現、符合該正規表示法的子字串,否則回傳null。如:

var tt =/[a-z]{2}\.[0-9]{2}/;

var tt1=new RegExp(tt);

document.write(tt1.exec("dpd.234"));    //顯示:pd.23

document.write(tt1.exec("5aa.1234@bb.4321"));    //顯示:aa.12

document.write(tt1.exec("123.asd"));   //顯示:null

document.write(tt1.exec("dsa.1"));   //顯示:null

(7) 正規表示物件與字串的成員函式:字串有兩個成員函式,可以使用正規表示物件。

(7-1) match(正規表示物件):若字串通過該正規表示物件的正規表示法,則回傳符合該正規表示法的子字串,否則回傳null。如:

s="A2R3GG...5W5";

var tt =new RegExp(/[a-z][0-9]/i);  //這正規表示法有附註條件i

document.write(s.match(tt));    //顯示:A2

註:若想將「所有」符合該正規表示法的子字串都回傳,則要在正規表示法中用到附註條件g。如:

s="A2R3GG...5W5";

var tt =new RegExp(/[a-z][0-9]/ig);    //這正規表示法有附註條件ig

document.write(s.match(tt));    //顯示:A2,R3,W5

(7-2) replace(正規表示物件 , 子字串1)若字串通過該正規表示物件的正規表示法,則將符合該正規表示法的子字串以子字串1來取代,並且將字串回傳。如:

s="A2R3GG...5W5";

var tt =new RegExp(/[a-z][0-9]/i);  //這正規表示法有附註條件i

document.write(s.replace(tt,"花哈"));  //顯示:花哈R3GG...5W5

註:若想將「所有」符合該正規表示法的子字串都取代,則要在正規表示法中用到附註條件g。如:

s="A2R3GG...5W5";

var tt =new RegExp(/[a-z][0-9]/ig);    //這正規表示法有附註條件ig

document.write(s.replace(tt,"花哈"));    //顯示:花哈花哈GG...5花哈

 

 

上一篇:javascript 字串

下一篇:window 物件 介紹

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()