30分鐘內讓你明白正則表達式是什么,并對它有一些基本的了解,讓你可以在自己的程序或網頁里使用它。一旦入門后,你可以從網上找到更多更詳細的資料來繼續學習。

          別被下面那些復雜的表達式嚇倒,只要跟著我一步一步來,你會發現正則表達式其實并不像你想像中的那么困難。當然,如果你看完了這篇教程之后發現自己明白了很多,卻又幾乎什么都記不得,那也是很正常的--其實我認為沒接觸過正則表達式的人在看完這篇教程后能把提到過的語法記住80%以上的可能性為零。這里只是讓你明白基本道理,以后你還需要多練習,多查資料,才能熟練掌握正則表達式。

          說明

          正則表達式是用于進行文本匹配的工具,所以本文里多次提到了在字符串里搜索/查找,這種說法的意思是在給定的字符串中,查找與給定的正則表達式相匹配的部分。有可能字符串里有不止一個部分滿足給定的正則表達式,這時每一個這樣的部分被稱為一個匹配。匹配在本文里可能會有三種意思:一種是形容詞性的,比如說一個字符串匹配一個表達式;一種是動詞性的,比如說在字符串里匹配正則表達式;還有一種是名字性的,就是剛剛說到的“字符串中滿足給定的正則表達式的一部分”。

          文本格式約定:專業術語 特殊代碼/語法格式 正則表達式 正則表達式中的一部分(用于分析) 用于在其中搜索的字符串 對正則表達式或其中一部分的說明

          什么是正則表達式?

          很可能你使用過Windows/Dos下用于文件查找的通配符,也就是*?。如果你想查找某個目錄下的所有的Word文檔的話,你會搜索*.doc。在這里,*會被解釋成任意的字符串。和通配符類似,正則表達式也是用來進行文本匹配的工具,只不過比通配符更能精確地描述你的需求--當然,代價就是更復雜。比如你可以編寫一個正則表達式來查找所有以0開頭,后面跟著2-3個數字,然后是一個連字號“-”,最后是7或8位數字的字符串(像010-123456780376-7654321)。

          入門

          在編寫處理字符串的程序或網頁時,經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。例如,\d+就是一個簡潔的代碼,代表著規則1位或更多位數字2008就符合這個規則,而A3則不符合(它包含了不是數字的字符)。

          學習正則表達式的最好方法是從例子開始,理解例子之后再自己對例子進行修改,實驗。下面給出了不少簡單的例子,并對它們作了詳細的說明。

          假設你在一篇英文小說里查找hi,你可以使用正則正則表達式hi

          這是最簡單的正則表達式了,它可以精確匹配這樣的字符串:由兩個字符組成,前一個字符是h,后一個是i。通常,處理正則表達式的工具會提供一個忽略大小寫的選項,如果選中了這個選項,它可以匹配hi,HI,Hi,hI

          不幸的是,很多單詞里包含hi這兩個連續的字符,比如him,history,high等等。用hi來查找的話,這里邊的hi也會被找出來。如果要精確地查找hi這個單詞的話,我們應該使用\bhi\b

          \b是正則表達式規定的一個特殊代碼,代表著單詞的開頭或結尾。雖然通常英文的單詞是由空格或標點符號或換行為分隔的,但是\b并不代表這些單詞分隔符中的任何一個,只代表一個位置

          假如你要找的是hi后面不遠處跟著一個Lucy,你應該用\bhi\b.*\bLucy\b

          這里,.是另一個特殊代碼,代表除了換行符以外的任意字符*同樣是特殊的代碼,不過它代表的不是字符,也不是位置,而是數量--它指定*前邊的內容可以重復任意次以使整個表達式得到匹配。因此,.*連在一起就意味著任意數量的不包含換行的字符。現在\bhi\b.*\bLucy\b的意思就很明顯了:先是一個單詞hi,然后是任意個任意字符(但不能是換行),最后是Lucy這個單詞

          如果同時使用其它的一些特殊代碼,我們就能構造出功能更強大的正則表達式。比如下面這個例子:

          0\d\d-\d\d\d\d\d\d\d\d代表著這樣的字符串:以0開頭,然后是兩個數字,然后是一個連字號“-”,最后是8個數字(也就是中國的電話號碼,當然,這個例子只能匹配區號為3位的情形,想同時匹配區號為4位的話,請在教程的下面尋找答案)。

          這里的\d是一個新的特殊代碼,代表任意的數字(0,或1,或2,或。。。)-不是特殊代碼,只代表它本身--連字號。

          為了避免那么多煩人的重復,我們也可以這樣寫這個表達式:0\d{2}-\d{8}

          這里\d后面的{2}({8})指定的是前面\d必須連續重復出現2次(8次)

          測試正則表達式

          如果你不覺得正則表達式很難讀寫的話,要么你是一個天才,要么,你不是地球人。正則表達式的語法很令人頭疼,即使對經常使用它的人來說也是如此。由于難于讀寫,容易出錯,所以很有必要創建一種工具來測試正則表達式。

          由于在不同的環境下正則表達式的一些細節是不相同的,本教程介紹的是Microsoft .net下正則表達式的行為,所以,我向你介紹一個.net下的工具The Regulator。首先你確保已經安裝了.net Framework1.1,然后下載The Regulator,下載完后打開壓縮包,運行setup.exe安裝。

          下面是the Regulator運行時的截圖:

          the Regulator運行時的截圖

          特殊代碼

          現在你已經知道幾個具有特殊意義的代碼了,如\b,.,*,還有\d.事實上還有更多的特殊代碼,比如\s代表任意的空白符,包括空格,制表符(Tab),換行符\w代表著字母或數字

          下面來試試更多的例子:

          \ba\w*\b匹配以字母a開頭的單詞-先是某個單詞開始處(\b),然后是字母a,然后是任意數量的字母或數字(\w*),最后是單詞結束處(\b)

          \d+匹配1個或更多連續的數字。這里的+是和*類似的特殊代碼,不同的是*代表重復任意次(可能是0次),而+則代表重復1次或更多次

          \b\w{6}\b 匹配剛好6個字母/數字的單詞

                                                                                                                                                                                                                                         
          代碼/語法說明
          .匹配除換行符以外的任意字符
          \w匹配字母或數字
          \s匹配任意的空白符
          \d匹配數字
          \b匹配單詞的開始或結束
          ^匹配字符串的開始
          $匹配字符串的結束

          特殊代碼^以及$\b有點類似,都匹配一個位置。^匹配你要用來查找的字符串的開頭,$匹配結尾。這兩個代碼在驗證輸入的內容時非常有用,比如一個網站如果要求你填寫的QQ號必須為5位到12位數字時,可以使用:^\d{5,12}$

          這里的{5,12}和前面介紹過的{2}是類似的,只不過{2}代表只能不多不少重復2次{5,12}則是必須重復最少5次,最多12次,否則都不匹配。

          因為使用了^$,所以輸入的整個字符串都要用來和\d{5,12}來匹配,也就是說整個輸入必須是5到12個數字,因此如果輸入的QQ號能匹配這個正則表達式的話,那就符合要求了。

          和忽略大小寫的選項類似,有些正則表達式處理工具還有一個處理多行的選項。如果選中了這個選項,^$的意義就變成了匹配行的開始處和結束處

          字符轉義

          如果你想查找特殊代碼本身的話,比如你查找.,或者*,就出現了問題:你沒法指定它們,因為它們會被解釋成其它的意思。這時你就必須使用\來取消這些字符的特殊意義。因此,你應該使用\.\*。當然,要查找\本身,你也得用\\.

          例如:www\.unibetter\.com匹配www.unibetter.comc:\\windows匹配c:\windows,2\^8匹配2^8(通常這是2的8次方的書寫方式)。

          重復

          你已經看過了前面的*,+,{2},{5,12}這幾個代表重復的方式了。下面是正則表達式中所有指定重復的方式:

                                                                                                                                                                                                             
          代碼/語法說明
          *重復零次或更多次
          +重復一次或更多次
          ?重復零次或一次
          {n}重復n次
          {n,}重復n次或更多次
          {n,m}重復n到m次

          下面是一些使用重復的例子:

          Windows\d+匹配Windows后面跟1個或更多數字

          13\d{9}匹配以13后面跟9個數字(中國的手機號)

          ^\w+匹配一行的第一個單詞(或整個字符串的第一個單詞,具體代表哪個意思得看選項設置)

          字符類

          要想查找數字,字母或數字,空白是很簡單的,因為已經有了對應這些字符集的特殊代碼,但是如果你想匹配沒有預定義特殊代碼的字符集比如元音字母(a,e,i,o,u),怎么辦?

          很簡單,你只需要在中括號里列出它們就行了,像[aeiou]就匹配任何一個元音字母[.?!]匹配標點符號(.或?或!)(英文語句通常只以這三個標點結束)。要注意的是,在中括號中,特殊代碼不會被解釋成其它意義,所以我們不需要寫成[\.\?!](事實上這樣寫會出錯,因為出現了兩次\)。

          我們也可以輕松地指定一個字符范圍,像[0-9]代表的含意與\d就是完全一致的:一位數字,同理[a-z0-9A-Z]也完全等同于\w。

          下面是一個更復雜的表達式:\(?0\d{2}[) -]?\d{8}

          這個表達式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進行一些分析吧:首先是一個轉義字符\(,它能出現0次或1次(?),然后是一個0,后面跟著2個數字({2}),然后是)-空格中的一個,它出現1次或不出現(?),最后是8個數字(\d{8})。不幸的是,它也能匹配010)12345678(022-87654321這樣的“不正確”的格式。要解決這個問題,請在本教程的下面查找答案。

          反義

          有時需要查找不屬于某個簡單定義的字符類的字符。比如想查找除了數字以外,其它任意字符都行的情況,這時需要用到反義

                                                                                                                                                                                                             
          代碼/語法說明
          \W匹配任意不是字母和數字的字符
          \S匹配任意不是空白符的字符
          \D匹配任意非數字的字符
          \B匹配不是單詞開頭或結束的位置
          [^x]匹配除了x以外的任意字符
          [^aeiou]匹配除了aeiou這幾個字母以外的任意字符

          例子:\S+代表不包含空白符的字符串

          <a[^>]+>代表用尖括號括起來的以a開頭的字符串

          替換

          好了,現在終于到了解決3位或4位區號問題的時間了。正則表達式里的替換指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。聽不明白?沒關系,看例子:

          0\d{2}-\d{8}|0\d{3}-\d{7}這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)

          \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}這個表達式匹配3位區號的電話號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字號或空格間隔,也可以沒有間隔。你可以試試用替換|把這個表達式擴展成也支持4位區號的。

          \d{5}-\d{4}|\d{5}這個表達式用于匹配美國的郵政編碼。美國郵編的規則是5位數字,或者用連字號間隔的9位數字。之所以要給出這個例子是因為它能說明一個問題:使用替換時,順序是很重要的。如果你把它改成\d{5}|\d{5}-\d{4}的話,那么就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配替換時,將會從左到右地測試每個條件,如果滿足了某個條件的話,就不會去管其它的替換條件了。

          Windows98|Windows2000|WindosXP這個例子是為了告訴你替換不僅僅能用于兩種規則,也能用于更多種規則。

          分組

          我們已經提到了怎么重復單個字符;但如果想要重復一個字符串又該怎么辦?你可以用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數了,你也可以對子表達式進行其它一些操作(教程后面會有介紹)。

          (\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}代表1到3位的數字(\d{1,3}\.}{3}代表三位數字加上一個英文句號(這個整體也就是這個分組)重復3次,最后再加上一個一到三位的數字(\d{1,3})。

          不幸的是,它也將匹配256.300.888.999這種不可能存在的IP地址(IP地址中每個數字都不能大于255)。如果能使用算術比較的話,或許能簡單地解決這個問題,但是正則表達式中并不提供關于數學的任何功能,所以只能使用冗長的分組,選擇,字符類來描述一個正確的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

          理解這個表達式的關鍵是理解2[0-4]\d|25[0-5]|[01]?\d\d?,這里我就不細說了,你自己應該能分析得出來它的意義。

          后向引用

          使用小括號指定一個子表達式后,匹配這個子表達式的文本可以在表達式或其它程序中作進一步的處理。默認情況下,每個分組會自動擁有一個組號,規則是:以分組的左括號為標志,從左向右,第一個分組的組號為1,第二個為2,以此類推。

          后向引用用于重復搜索前面某個分組匹配的文本。例如,\1代表分組1匹配的文本。難以理解?請看示例:

          \b(\w+)\b\s+\1\b可以用來匹配重復的單詞,像go go, kitty kitty。首先是一個單詞,也就是單詞開始處和結束處之間的多于一個的字母或數字(\b(\w+)\b),然后是1個或幾個空白符(\s+,最后是前面匹配的那個單詞(\1)。

          你也可以自己指定子表達式的組號或組名。要指定一個子表達式的組名,請使用這樣的語法:(?<Word>\w+),這樣就把\w+的組名指定為Word了。要反向引用這個分組捕獲的內容,你可以使用\k<Word>,所以上一個例子也可以寫成這樣:\b(?<Word>\w+)\b\s*\k<Word>\b

          使用小括號的時候,還有很多特定用途的語法。下面列出了最常用的一些:

                                                                                                                                                                                                                                                                                                  
          捕獲
          (exp)匹配exp,并捕獲文本到自動命名的組里
          (?<name>exp)匹配exp,并捕獲文本到名稱為name的組里
          (?:exp)匹配exp,不捕獲匹配的文本
          位置指定
          (?=exp)匹配exp前面的位置
          (?<=exp)匹配exp后面的位置
          (?!exp)匹配后面跟的不是exp的位置
          (?<!exp)匹配前面不是exp的位置
          注釋
          (?#comment)這種類型的組不對正則表達式的處理產生任何影響,只是為了提供讓人閱讀注釋

          我們已經討論了前兩種語法。第三個(?:exp)不會改變正則表達式的處理方式,只是這樣的組匹配的內容不會像前兩種那樣被捕獲到某個組里面

          位置指定

          接下來的四個用于查找在某些內容(但并不包括這些內容)之前或之后的東西,也就是說它們用于指定一個位置,就像\b,^,$那樣,因此它們也被稱為零寬斷言。最好還是拿例子來說明吧:

          (?=exp)也叫零寬先行斷言,它匹配文本中的某些位置,這些位置的后面能匹配給定的后綴exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.時,它會匹配singdanc

          (?<=exp)也叫零寬后行斷言,它匹配文本中的某些位置,這些位置的前面能給定的前綴匹配exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的后半部分(除了re以外的部分),例如在查找reading a book時,它匹配ading

          假如你想要給一個很長的數字中每三位間加一個逗號(當然是從右邊加起了),你可以這樣查找需要在前面和里面添加逗號的部分:((?<=\d)\d{3})*\b。請仔細分析這個表達式,它可能不像你第一眼看出來的那么簡單。

          下面這個例子同時使用了前綴和后綴:(?<=\s)\d+(?=\s)匹配以空白符間隔的數字(再次強調,不包括這些空白符)

          負向位置指定

          前面我們提到過怎么查找不是某個字符或不在某個字符類里的字符的方法(反義)。但是如果我們只是想要確保某個字符沒有出現,但并不想去匹配它時怎么辦?例如,如果我們想查找這樣的單詞--它里面出現了字母q,但是q后面跟的不是字母u,我們可以嘗試這樣:

          \b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的單詞。但是如果多做測試(或者你思維足夠敏銳,直接就觀察出來了),你會發現,如果q出現在單詞的結尾的話,像Iraq,Benq,這個表達式就會出錯。這是因為[^u]總是匹配一個字符,所以如果q是單詞的最后一個字符的話,后面的[^u]將會匹配q后面的單詞分隔符(可能是空格,或者是句號或其它的什么),后面的\w+\b將會匹配下一個單詞,于是\b\w*q[^u]\w*\b就能匹配整個Iraq fighting負向位置指定能解決這樣的問題,因為它只匹配一個位置,并不消費任何字符。現在,我們可以這樣來解決這個問題:\b\w*q(?!u)\w*\b

          零寬負向先行斷言(?!exp),只會匹配后綴exp不存在的位置\d{3}(?!\d)匹配三位數字,而且這三位數字的后面不能是數字

          同理,我們可以用(?<!exp),零寬負向后行斷言來查找前綴exp不存在的位置(?<![a-z])\d{7}匹配前面不是小寫字母的七位數字(實驗時發現錯誤?注意你的“區分大小寫”先項是否選中)。

          一個更復雜的例子:(?<=<(\w+)>).*(?=<\/\1>)匹配不包含屬性的簡單HTML標簽內里的內容(<?(\w+)>)指定了這樣的前綴:被尖括號括起來的單詞(比如可能是<b>),然后是.*(任意的字符串),最后是一個后綴(?=<\/\1>)。注意后綴里的\/,它用到了前面提過的字符轉義;\1則是一個反向引用,引用的正是捕獲的第一組,前面的(\w+)匹配的內容,這樣如果前綴實際上是<b>的話,后綴就是</b>了。整個表達式匹配的是<b>和</b>之間的內容(再次提醒,不包括前綴和后綴本身)。

          注釋

          小括號的另一種用途是能過語法(?#comment)來包含注釋。要包含注釋的話,最好是啟用“忽略模式里的空白符”選項,這樣在編寫表達式時能任意的添加空格,Tab,換行,而實際使用時這些都將被忽略。啟用這個選項后,在#后面到這一行結束的所有文本都將被當成注釋忽略掉。例如,我們可以把上一個表達式寫成這樣:

          (?<=    # 查找前綴,但不包含它       <(\w+)> # 查找尖括號括起來的字母或數字(標簽)       )       # 前綴結束       .*      # 匹配任意文本       (?=     # 查找后綴,但不包含它       <\/\1>  # 查找尖括號括起來的內容:前面是一個"/",后面是先前捕獲的標簽       )       # 后綴結束

          貪婪與懶惰

          當正則表達式中包含能接受重復的量詞(指定數量的代碼,例如*,{5,12}等)時,通常的行為是匹配盡可能多的字符。考慮這個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱為貪婪匹配。

          有時,我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的量詞都可以被轉化為懶惰匹配模式,只要在它后面加上一個問號?。這樣.*?就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。現在看看懶惰版的例子吧:

          a.*?b匹配最短的,以a開始,以b結束的字符串。如果把它應用于aabab的話,它會匹配aabab

                                                                                                                                                     
          *?重復任意次,但盡可能少重復
          +?重復1次或更多次,但盡可能少重復
          ??重復0次或1次,但盡可能少重復
          {n,m}?重復n到m次,但盡可能少重復
          {n,}?重復n次以上,但盡可能少重復

          還有些什么東西沒提到

          我已經描述了構造正則表達式的大量元素,還有一些我沒有提到的東西。下面是未提到的元素的列表,包含語法和簡單的說明。你可以在網上找到更詳細的參考資料來學習它們--當你需要用到它們的時候。如果你安裝了MSDN Library,你也可以在里面找到關于.net下正則表達式詳細的文檔。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
          \a報警字符(打印它的效果是電腦嘀一聲)
          \b通常是單詞分界位置,但如果在字符類里使用代表退格
          \t制表符,Tab
          \r回車
          \v豎向制表符
          \f換頁符
          \n換行符
          \eEscape
          \0nnASCII代碼中八進制代碼為nn的字符
          \xnnASCII代碼中十六進制代碼為nn的字符
          \unnnnUnicode代碼中十六進制代碼為nnnn的字符
          \cNASCII控制字符。比如\cC代表Ctrl+C
          \A字符串開頭(類似^,但不受處理多行選項的影響)
          \Z字符串結尾或行尾(不受處理多行選項的影響)
          \z字符串結尾(類似$,但不受處理多行選項的影響)
          \G當前搜索的開頭
          \p{name}Unicode中命名為name的字符類,例如\p{IsGreek}
          (?>exp)貪婪子表達式
          (?<x>-<y>exp)平衡組
          (?-<y>exp)平衡組
          (?im-nsx:exp)在子表達式exp中改變處理選項
          (?im-nsx)為表達式后面的部分改變處理選項
          (?(exp)yes|no)把exp當作零寬正向先行斷言,如果在這個位置能匹配,使用yes作為此組的表達式;否則使用no
          (?(exp)yes)同上,只是使用空表達式作為no
          (?(name)yes|no)如果命名為name的組捕獲到了內容,使用yes作為表達式;否則使用no
          (?(name)yes)同上,只是使用空表達式作為no

          一些我認為你可能已經知道的術語的參考

          字符
          程序處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等等。
          字符串
          0個或更多個字符的序列。
          文本
          文字,字符串。
          匹配
          符合規則,檢驗是否符合規則,符合規則的部分。

          posted @ 2007-06-14 14:10 siwei 閱讀(195) | 評論 (0)編輯 收藏

          一個正則表達式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。

          這里有一些可能會遇到的正則表達式示例:

          JScript VBScript 匹配
          /^\[ \t]*$/ "^\[ \t]*$" 匹配一個空白行。
          /\d{2}-\d{5}/ "\d{2}-\d{5}" 驗證一個ID 號碼是否由一個2位數字,一個連字符以及一個5位數字組成。
          /<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一個 HTML 標記。

          下表是元字符及其在正則表達式上下文中的行為的一個完整列表:

          字符 描述
          \ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個 后向引用、或一個八進制轉義符。例如,'n' 匹配字符 "n"。'\n' 匹配一個換行符。序列 '\\' 匹配 "\" 而 "\(" 則匹配 "("。
          ^ 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。
          $ 匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
          * 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價于{0,}。
          + 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。
          ? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價于 {0,1}。
          {n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
          {n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
          {n,m} mn 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格。
          ? 當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
          . 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
          (pattern) 匹配pattern 并獲取這一匹配。所獲取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0$9 屬性。要匹配圓括號字符,請使用 '\(' 或 '\)'。
          (?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 "或" 字符 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表達式。
          (?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
          (?!pattern) 負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
          x|y 匹配 xy。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
          [xyz] 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
          [^xyz] 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
          [a-z] 字符范圍。匹配指定范圍內的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符。
          [^a-z] 負值字符范圍。匹配任何不在指定范圍內的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
          \b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
          \B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
          \cx 匹配由x指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字符。
          \d 匹配一個數字字符。等價于 [0-9]。
          \D 匹配一個非數字字符。等價于 [^0-9]。
          \f 匹配一個換頁符。等價于 \x0c 和 \cL。
          \n 匹配一個換行符。等價于 \x0a 和 \cJ。
          \r 匹配一個回車符。等價于 \x0d 和 \cM。
          \s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
          \S 匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
          \t 匹配一個制表符。等價于 \x09 和 \cI。
          \v 匹配一個垂直制表符。等價于 \x0b 和 \cK。
          \w 匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'。
          \W 匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]'。
          \xn 匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如, '\x41' 匹配 "A"。'\x041' 則等價于 '\x04' & "1"。正則表達式中可以使用 ASCII 編碼。.
          \num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。例如,'(.)\1' 匹配兩個連續的相同字符。
          \n 標識一個八進制轉義值或一個后向引用。如果 \n 之前至少 n 個獲取的子表達式,則 n 為后向引用。否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值。
          \nm 標識一個八進制轉義值或一個后向引用。如果 \nm 之前至少有is preceded by at least nm 個獲取得子表達式,則 nm 為后向引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的后向引用。如果前面的條件都不滿足,若  nm 均為八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm
          \nml 如果 n 為八進制數字 (0-3),且 ml 均為八進制數字 (0-7),則匹配八進制轉義值 nml。
          \un 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符。例如, \u00A9 匹配版權符號 (?)。

           

          正則表達式的優先權順序

          在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先權順序來求值。

          下表從最高優先級到最低優先級列出各種正則表達式操作符的優先權順序:

          操作符 描述
          \ 轉義符
          (), (?:), (?=), [] 圓括號和方括號
          *, +, ?, {n}, {n,}, {n,m} 限定符
          ^, $, \anymetacharacter 位置和順序
          | “或”操作


          posted @ 2007-06-14 14:06 siwei 閱讀(154) | 評論 (0)編輯 收藏

          構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與操作符將小的表達式結合在一起來創建更大的表達式。

          可以通過在一對分隔符之間放入表達式模式的各種組件來構造一個正則表達式。對 Visual Basic Scripting Edition 而言,分隔符為一對正斜杠 (/) 字符。例如:

          /expression/

          對 VBScript 而言,則采用一對引號 ("") 來確定正則表達式的邊界。例如:

          "expression"

          在上面所示的兩個示例中,正則表達式模式 (expression) 均存儲在RegExp 對象的Pattern 屬性中。

          正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

          優先權順序

          在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先權順序來求值。

          下表從最高優先級到最低優先級列出各種正則表達式操作符的優先權順序:

          操作符 描述

          \ 轉義符

          (), (?:), (?=), [] 圓括號和方括號

          *, +, ?, {n}, {n,}, {n,m} 限定符

          ^, $, \anymetacharacter 位置和順序

          | “或”操作


          普通字符

          普通字符由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫和小寫字母字符,所有數字,所有標點符號以及一些符號。

          最簡單的正則表達式是一個單獨的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式 'A' 可以匹配所搜索字符串中任何位置出現的字母 'A'。這里有一些單字符正則表達式模式的示例:

          /a/
          /7/
          /M/

          等價的 VBScript 單字符正則表達式為:

          "a"
          "7"
          "M"

          可以將多個單字符組合在一起得到一個較大的表達式。例如,下面的 Visual Basic Scripting Edition 正則表達式不是別的,就是通過組合單字符表達式 'a'、'7'以及 'M' 所創建出來的一個表達式。

          /a7M/

          等價的 VBScript 表達式為:

          "a7M"

          請注意這里沒有連接操作符。所需要做的就是將一個字符放在了另一個字符后面。


          特殊字符

          有不少元字符在試圖對其進行匹配時需要進行特殊的處理。要匹配這些特殊字符,必須首先將這些字符轉義,也就是在前面使用一個反斜杠 (\)。下表給出了這些特殊字符及其含義:      






          特殊字符
          說明


          $
          匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,請使用 \$。


          ( )
          標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。要匹配這些字符,請使用 \( 和 \)。


          *
          匹配前面的子表達式零次或多次。要匹配 * 字符,請使用 \*。


          +
          匹配前面的子表達式一次或多次。要匹配 + 字符,請使用 \+。


          .
          匹配除換行符 \n之外的任何單字符。要匹配 .,請使用 \。



          標記一個中括號表達式的開始。要匹配 [,請使用 \[。


          ?
          匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 ?字符,請使用 \?。


          \
          將下一個字符標記為或特殊字符、或原義字符、或后向引用、或八進制轉義符。例如, 'n' 匹配字符 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。


          ^
          匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。要匹配 ^ 字符本身,請使用 \^。


          {
          標記限定符表達式的開始。要匹配 {,請使用 \{。


          |
          指明兩項之間的一個選擇。要匹配 |,請使用 \|。


          非打印字符

          有不少很有用的非打印字符,偶爾必須使用。下表顯示了用來表示這些非打印字符的轉義序列:






          字符
          含義


          \cx
          匹配由x指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字 符。


          \f
          匹配一個換頁符。等價于 \x0c 和 \cL。


          \n
          匹配一個換行符。等價于 \x0a 和 \cJ。


          \r
          匹配一個回車符。等價于 \x0d 和 \cM。


          \s
          匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[\f\n\r\t\v]。


          \S
          匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。


          \t
          匹配一個制表符。等價于 \x09 和 \cI。


          \v
          匹配一個垂直制表符。等價于 \x0b 和 \cK。


          字符匹配

          句點 (.) 匹配一個字符串中任何單個的打印或非打印字符,除了換行符 (\n) 之外。下面的 Visual Basic Scripting Edition 正則表達式可以匹配 'aac'、'abc'、'acc'、'adc'如此等等,同樣也可以匹配 'a1c'、'a2c'、a-c'以及 a#c':

          /a.c/

          等價的 VBScript 正則表達式為:

          "a.c"

          如果試圖匹配一個包含文件名的字符串,其中句點 (.) 是輸入字符串的一部分,則可以在正則表達式中的句點前面加上一個反斜杠 (\) 字符來實現這一要求。舉例來說,下面的 Visual Basic Scripting Edition 正則表達式就能匹配 'filename.ext':

          /filename\.ext/

          對 VBScript 而言,等價的表達式如下所示:

          "filename\.ext"

          這些表達式仍然是相當有限的。它們只允許匹配任何單字符。很多情況下,對從列表中匹配特殊字符十分有用。例如,如果輸入文字中包含用數字表示為Chapter 1, Chapter 2諸如此類的章節標題,你可能需要找到這些章節標題。


          括號表達式

          可以在一個方括號 ([ 和 ]) 中放入一個或多個單字符,來創建一個待匹配的列表。如果字符被放入括號中括起來,則該列表稱為括號表達式。括號內和其他任何地方一樣,普通字符代表其本身,也就是說,它們匹配輸入文字中出現的一處自己。大多數特殊字符在位于括號表達式中時都將失去其含義。這里有一些例外:

          1. ']' 字符如果不是第一項,則將結束一個列表。要在列表中匹配 ']' 字符,請將其放在第一項,緊跟在開始的 '[' 后面。

          2. '\' 仍然作為轉義符。要匹配 '\' 字符,請使用 '\\'。

          括號表達式中所包含的字符只匹配該括號表達式在正則表達式中所處位置的一個單字符。下面的 Visual Basic Scripting Edition 正則表達式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5':

          /Chapter ][12345]/

          在 VBScript 中要匹配同樣的章節標題,請使用下面的表達式:

          "Chapter [12345]"

          請注意單詞 'Chapter' 及后面的空格與括號內的字符的位置關系是固定的。因此,括號表達式只用來指定滿足緊跟在單詞 'Chapter' 和一個空格之后的單字符位置的字符集合。這里是第九個字符位置。

          如果希望使用范圍而不是字符本身來表示待匹配的字符,則可以使用連字符將該范圍的開始和結束字符分開。每個字符的字符值將決定其在一個范圍內的相對順序。下面的 Visual Basic Scripting Edition 正則表達式包含了一個等價于上面所示的括號列表的范圍表達式。

          /Chapter [1-5]/

          VBScipt 中相同功能的表達式如下所示:

          "Chapter [1-5]"

          如果以這種方式指定范圍,則開始和結束值都包括在該范圍內。有一點特別需要注意的是,在 Unicode 排序中起始值一定要在結束值之前。

          如果想在括號表達式中包括連字符,則必須使用下述方法之一:

          1. 使用反斜杠將其轉義: [\-]

          2. 將連字符放在括號列表的開始和結束位置。下面的表達式能匹配所有的小寫字母和連字符:[-a-z],[a-z-]

          3. 創建一個范圍,其中開始字符的值小于連字符,而結束字符的值等于或大于連字符。下面兩個正則表達式都滿足這一要求: [!--],[!-~]

          同樣,通過在列表開始處放置一個插入符(^),就可以查找所有不在列表或范圍中的字符。如果該插入符出現在列表的其他位置,則匹配其本身,沒有任何特殊含義。下面的 Visual Basic Scripting Edition 正則表達式匹配章節號大于 5 的章節標題:

          /Chapter [^12345]/

          對 VBScript 則使用:

          "Chapter [^12345]"

          在上面所示的示例中,表達式將匹配第九個位置處除1, 2, 3, 4, or 5 之外的任何數字字符。因此, 'Chapter 7' 為一個匹配,同樣 'Chapter 9' 也是如此。

          上面的表達式可以使用連字符 (-) 表示。對 Visual Basic Scripting Edition 為:

          /Chapter [^1-5]/

          或者,對 VBScript 為:

          "Chapter [^1-5]"

          括號表達式的典型用法是指定對任何大寫或小寫字母字符或任何數字的匹配。下面的 Visual Basic Scripting Edition 表達式給出了這一匹配:

          /[A-Za-z0-9]/

          等價的 VBScript 表達式為:

          "[A-Za-z0-9]"

          posted @ 2007-06-14 14:03 siwei 閱讀(589) | 評論 (0)編輯 收藏

          正則表達式(regular expression)對象包含一個正則表達式模式(pattern)。它具有用正則表達式模式去匹配或代替一個串(string)中特定字符(或字符集合)的屬性(properties)和方法(methods)。 要為一個單獨的正則表達式添加屬性,可以使用正則表達式構造函數(constructor function),無論何時被調用的預設置的正則表達式擁有靜態的屬性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得對不對,將原文列出,請自行翻譯)。

          創建:
          一個文本格式或正則表達式構造函數
          文本格式: /pattern/flags
          正則表達式構造函數: new RegExp("pattern"[,"flags"]);
          參數說明:
          pattern -- 一個正則表達式文本
          flags -- 如果存在,將是以下值:
          g: 全局匹配
          i: 忽略大小寫
          gi: 以上組合
          [注意] 文本格式的參數不用引號,而在用構造函數時的參數需要引號。如:/ab+c/i new RegExp("ab+c","i")是實現一樣的功能。在構造函數中,一些特殊字符需要進行轉意(在特殊字符前加"\")。如:re = new RegExp("\\w+")

          正則表達式中的特殊字符

          字符 含意 
          \ 做為轉意,即通常在"\"后面的字符不按原來意義解釋,如/b/匹配字符"b",當b前面加了反斜桿后/\b/,轉意為匹配一個單詞的邊界。
          -或-
          對正則表達式功能字符的還原,如"*"匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了"\"后,/a\*/將只匹配"a*"。

          ^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a" 
          $ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A" 
          * 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa 
          + 匹配前面元字符1次或多次,/ba+/將匹配ba,baa,baaa 
          ? 匹配前面元字符0次或1次,/ba?/將匹配b,ba 
          (x) 匹配x保存x在名為$1...$9的變量中 
          x|y 匹配x或y 
          {n} 精確匹配n次 
          {n,} 匹配n次以上 
          {n,m} 匹配n-m次 
          [xyz] 字符集(character set),匹配這個集合中的任一一個字符(或元字符) 
          [^xyz] 不匹配這個集合中的任何一個字符 
          [\b] 匹配一個退格符
          \b 匹配一個單詞的邊界 
          \B 匹配一個單詞的非邊界
          \cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M 
          \d 匹配一個字數字符,/\d/ = /[0-9]/ 
          \D 匹配一個非字數字符,/\D/ = /[^0-9]/ 
          \n 匹配一個換行符 
          \r 匹配一個回車符 
          \s 匹配一個空白字符,包括\n,\r,\f,\t,\v等 
          \S 匹配一個非空白字符,等于/[^\n\f\r\t\v]/ 
          \t 匹配一個制表符 
          \v 匹配一個重直制表符 
          \w 匹配一個可以組成單詞的字符(alphanumeric,這是我的意譯,含數字),包括下劃線,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
          \W 匹配一個不可以組成單詞的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。



          說了這么多了,我們來看一些正則表達式的實際應用的例子:

          E-mail地址驗證:
          function test_email(strEmail) {
           var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
           if(myReg.test(strEmail)) return true;
           return false;
          }
          HTML代碼的屏蔽
          function mask_HTMLCode(strInput) {
            var myReg = /<(\w+)>/;
            return strInput.replace(myReg, "&lt;$1&gt;");
          }

          posted @ 2007-06-14 14:01 siwei 閱讀(147) | 評論 (0)編輯 收藏

          javascript驗證表單時常用 

          "^-[0-9]*[1-9][0-9]*$"  //負整數 

          "^-?\d+$"    //整數 

          "^\d+(\.\d+)?$"  //非負浮點數(正浮點數 + 0) 

          "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數 

          "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮點數(負浮點數 + 0) 

          "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數 

          "^(-?\d+)(\.\d+)?$"  //浮點數 

          "^[A-Za-z]+$"  //由26個英文字母組成的字符串 

          "^[A-Z]+$"  //由26個英文字母的大寫組成的字符串 

          "^[a-z]+$"  //由26個英文字母的小寫組成的字符串 

          "^[A-Za-z0-9]+$"  //由數字和26個英文字母組成的字符串 

          "^\w+$"  //由數字、26個英文字母或者下劃線組成的字符串 

          "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 

          "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url

          posted @ 2007-06-14 13:58 siwei 閱讀(172) | 評論 (0)編輯 收藏

          function Checkreg()
          {
          //驗證電話號碼手機號碼,包含153,159號段
               if (document.form.phone.value=="" && document.form.UserMobile.value==""){
                   alert("電話號碼和手機號碼至少選填一個阿!");
                   document.form.phone.focus();
                   return false;
                   }
               if (document.form.phone.value != ""){
                   var phone=document.form.phone.value;
                   var p1 = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
                   var me = false;
                   if (p1.test(phone))me=true;
                   if (!me){
                       document.form.phone.value='';
                       alert('對不起,您輸入的電話號碼有錯誤。區號和電話號碼之間請用-分割');
                       document.form.phone.focus();
                       return false;
                   }
               }
               if (document.form.UserMobile.value != ""){
                   var mobile=document.form.UserMobile.value;
                   var reg0 = /^13\d{5,9}$/;
                   var reg1 = /^153\d{4,8}$/;
                   var reg2 = /^159\d{4,8}$/;
                   var reg3 = /^0\d{10,11}$/;
                   var my = false;
                   if (reg0.test(mobile))my=true;
                   if (reg1.test(mobile))my=true;
                   if (reg2.test(mobile))my=true;
                   if (reg3.test(mobile))my=true;
                   if (!my){
                       document.form.UserMobile.value='';
                       alert('對不起,您輸入的手機或小靈通號碼有錯誤。');
                       document.form.UserMobile.focus();
                       return false;
                   }
                   return true;
               }
          }
          說明
          test方法檢查在字符串中是否存在一個模式,如果存在則返回 true,否則就返回 false。

          正則表達式部分:
          \d 代表一個數字
          {7,8} 代表7-8位數字(表示電話號碼)
          {3,} 代表分機號碼
          d{2,3} 代表區號
          \+]\d{2,3} 代表國際區號
          ^13\d{5,9}$/ //130–139。至少5位,最多9位
          /^153\d{4,8}$/ //聯通153。至少4位,最多8位
          /^159\d{4,8}$/ //移動159。至少4位,最多8位 

          posted @ 2007-06-14 13:56 siwei 閱讀(3539) | 評論 (0)編輯 收藏

          temp += "<span id=Min onclick='parent.New_CW.hide();parent.blur()' style=""+CSStext+"font-family:Webdings;" title='Minimum'>0</span>";
          temp += "<span id=Max onclick="this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();" style=""+CSStext+"font-family:Webdings;" title='Maximum'>1</span>";
          temp += "<span id=Close onclick='parent.opener=null;parent.close()' style=""+CSStext+"font-family:System;padding-right:2px;" title='Close'>x</span>";
          temp += "</td></tr><tr><td colspan=2>";
          temp += "<div id=include style='overflow:scroll;overflow-x:hidden;overflow-y:auto; HEIGHT: 100%; width:"+CW_width+"'>";
          temp += content;
          temp += "</div>";
          temp += "</td></tr></table>";
          CW_Body.innerHTML = temp;
          }

          setTimeout("insert_content()",1000);

          var if_max = true;
          function show_CW(){
          window.moveTo(10000, 10000);
          if(if_max){
          New_CW.show(CW_top, CW_left, CW_width, CW_height);
          if(typeof(New_CW.document.all.include)!="undefined"){
          New_CW.document.all.include.style.width = CW_width;
          New_CW.document.all.Max.innerText = "1";
          }

          }else{
          New_CW.show(0, 0, screen.width, screen.height);
          New_CW.document.all.include.style.width = screen.width;
          }
          }

          window.onfocus = show_CW;
          window.onresize = show_CW;

          // Move Window
          var drag_x,drag_y,draging=false

          function drag_move(e){
          if (draging){
          New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
          return false;
          }
          }

          function drag_down(e){
          if(e.button==2)return;
          if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
          drag_x=e.clientX;
          drag_y=e.clientY;
          draging=true;
          e.srcElement.setCapture();
          }

          function drag_up(e){
          draging=false;
          e.srcElement.releaseCapture();
          if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
          CW_top = e.screenX-drag_x;
          CW_left = e.screenY-drag_y;
          }

          </SCRIPT>
          </HTML>

          6.6 電話號碼的驗證

          要求:
            (1)電話號碼由數字、"("、")"和"-"構成
            (2)電話號碼為3到8位
            (3)如果電話號碼中包含有區號,那么區號為三位或四位
            (4)區號用"("、")"或"-"和其他部分隔開
            (5)移動電話號碼為11或12位,如果為12位,那么第一位為0
            (6)11位移動電話號碼的第一位和第二位為"13"
            (7)12位移動電話號碼的第二位和第三位為"13"
            根據這幾條規則,可以與出以下正則表達式:
            (^[0-9]-[0-9]$)│(^[0-9]$)│(^([0-9])[0-9]$)│(^013[0-9]$)


          <script language="javascript">
          function PhoneCheck(s) {
          var str=s;
          var reg=/(^[0-9]-[0-9]$)│(^[0-9]$)│(^([0-9])[0-9]$)│(^013[0-9]$)/
          alert(reg.test(str));
          }
          </script>
          <input type=text name="iphone">
          <input type=button onclick="PhoneCheck(document.all.iphone.value)" value="Check">

          二、功能類

          1、時間與相關控件類
          1.1 日歷
          精華區的日歷

          1.2 時間控件

          1.3 萬年歷
          http://202.112.86.128/studentspace/...calendars/rili/
          1.4 顯示動態顯示時鐘效果(文本,如OA中時間)
          特效很容易找到的
          1.5 顯示動態顯示時鐘效果 (圖像,像手表)
          特效很容易找到的
          2、表單類
          2.1 自動生成表單
          2.2 動態添加,修改,刪除下拉框中的元素
          大版主的js寶庫里面的對select 的操作已經可以是精品了。
          2.3 可以輸入內容的下拉框

          2.4 多行文本框中只能輸入iMax文字。如果多輸入了,自動減少到iMax個文字(多用于短信發送)

          3、打印類
          3.1 打印控件
          <HTML>
          <HEAD>
          <TITLE> New Document </TITLE>
          <META NAME="Generator" CONTENT="EditPlus">
          <META NAME="Author" CONTENT="">
          <META NAME="Keywords" CONTENT="">
          <META NAME="Description" CONTENT="">
          <SCRIPT LANGUAGE=javascript>
          <!--
          function setPrint()

          function previewPrint()


          //-->
          </SCRIPT>
          <script language=vbscript>
          function setup_page
          Dim wsh
          Set wsh = CreateObject("WScript.Shell")
          on error resume next

          wsh.RegWrite "HKCUSoftwareMicrosoftInternet explorerPageSetupheader", "", "REG_SZ"
          wsh.RegWrite "HKCUSoftwareMicrosoftInternet ExplorerPageSetupfooter", "", "REG_SZ"

          end function

          </script>
          </HEAD>

          <BODY>
          <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0>
          </OBJECT>
          <INPUT type="button" value="Set" id=button1 name=button1 onclick="setPrint();">
          <INPUT type="button" value="Preview" id=button2 name=button2 onclick="previewPrint();">
          <INPUT type="button" value="setup" id=button2 name=button2 onclick="setup_page();">
          </BODY>
          </HTML>

          4、事件類
          4.1 屏蔽右鍵
          4.2 屏蔽所有功能鍵
          4.3 --> 和<-- F5 F11,F9,F1
          4.4 屏蔽組合鍵ctrl+N
          <script>
          //禁止ctrl+n和 禁止ctrl+r和 禁止shift+f10 禁止鼠標右鍵or左右鍵 和禁止f5
          var oLastBtn=0,bIsMenu=false
          if (window.Event)
          {
          document.captureEvents(Event.MOUSEUP);
          }

          function nocontextmenu()
          {
          event.cancelBubble=true;
          event.returnValue=false;
          return false;
          }

          function norightclick(e)

          {
          if(window.Event)
          {
          if (e.which !=1)
          {
          return false;
          }
          }
          else
          if(event.button!=1)
          {
          event.cancelBubble=true;
          event.returnValue=false;
          return false;
          }
          }

          document.oncontextmenu=nocontextmenu;
          document.onmousedown=norightclick;

          function onKeyDown()
          {
          if ((event.altKey)││((event.keyCode==8)&&(event.srcElement.type!="text"&&event.srcElement.type!="textarea"&&event.srcElement.type!="password"))││((event.ctrlKey)&&((event.keyCode==78)││(event.keyCode==82)))││(event.keyCode==116))

          }
          </script>
          <body onkeydown="onKeyDown()">
          <body>
          </html>
          5、網頁設計類
          5.1 連續滾動的文字,圖片(注意是連續的,兩段文字和圖片中沒有空白出現)
          5.2 html編輯控件類
          5.3 顏色選取框控件
          5.4 下拉菜單
          5.5 兩層或多層次的下拉菜單
          5.6 仿IE菜單的按鈕。(效果如rongshuxa.com的導航欄目)
          5.7 狀態欄,title欄的動態效果(例子很多,可以研究一下)
          5.8 雙擊后,網頁自動滾屏
          以上都是特效類,很容易找到的。
          6、樹型結構。
          6.1 asp+SQL版
          6.2 asp+xml+sql版
          6.3 java+sql或者java+sql+xml
          7、無邊框效果的制作
          8、連動下拉框技術
          9、文本排序
          10,畫圖類,含餅、柱、矢量貝滋曲線
          <OBJECT
          id=S
          style="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px"
          height=240
          width=392
          classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E6">
          </OBJECT>
          <SCRIPT>
          S.DrawingSurface.ArcDegrees(0,0,0,30,50,60);
          S.DrawingSurface.ArcRadians(30,0,0,30,50,60);
          S.DrawingSurface.Line(10,10,100,100);
          </SCRIPT>


          11,操縱客戶端注冊表類
          <SCRIPT>
          var WshShell = WScript.CreateObject("WScript.Shell");
          WshShell.RegWrite ("HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY");
          WshShell.RegWrite ("HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ");
          var bKey = WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\");
          WScript.Echo (WshShell.RegRead ("HKCU\Software\ACME\FortuneTeller\MindReader"));
          WshShell.RegDelete ("HKCU\Software\ACME\FortuneTeller\MindReader");
          WshShell.RegDelete ("HKCU\Software\ACME\FortuneTeller\");
          WshShell.RegDelete ("HKCU\Software\ACME\");
          </SCRIPT>

          12,DIV層相關(拖拽、顯示、隱藏、移動、增加)
          13,TABLAE相關(客戶端動態增加行列,模擬進度條,滾動列表等)
          <HTML>
          <SCRIPT LANGUAGE="JScript">
          function numberCells() {
          var count=0;
          for (i=0; i < document.all.mytable.rows.length; i++) {
          for (j=0; j < document.all.mytable.rows(i).cells.length; j++) {
          document.all.mytable.rows(i).cells(j).innerText = count;
          count++;
          }
          }
          }
          </SCRIPT>
          <BODY onload="numberCells()">
          <TABLE id=mytable border=1>
          <TR><TH> </TH><TH> </TH><TH> </TH><TH> </TH></TR>
          <TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
          <TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
          </TABLE>
          </BODY>
          </HTML>
          14,各種<object classid=>相關類,如播放器,flash與腳本互動等
          16, 刷新/模擬無刷新 異步調用類(XMLHttp或iframe,frame)

          posted @ 2007-06-14 13:54 siwei 閱讀(220) | 評論 (0)編輯 收藏

          常用正則表達式[文章]

          一、驗證類
          1、數字驗證內
          1.1 整數
          /^(-│+)?d+$/  不可以為空
          /^[-+]?d*$/ 可以為空
          1.2 大于0的整數 (用于傳來的ID的驗證)
          /^d+$/
          1.3 負整數的驗證
          /^-d+$/
          1.4 整數不能大于iMax
          根據上面的正則可以寫出。
          1.5 整數不能小于iMin
          根據上面的正則可以寫出。
          2、時間類
          2.1 短時間,形如 (13:04:06)
              function isTime(str)
          {
          var a = str.match(/^(d)(:)?(d)2(d)$/);
          if (a == null) {alert('輸入的參數不是時間格式'); return false;}
          if (a[1]>24 ││ a[3]>60 ││ a[4]>60)
          {
          alert("時間格式不對");
          return false
          }
          return true;
          }

          2.2 短日期,形如 (2003-12-05)
          function strDateTime(str)
          {
          var r = str.match(/^(d)(-│/)(d)2(d)$/);
          if(r==null)return false;
          var d= new Date(r[1], r[3]-1, r[4]);
          return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
          }

          2.3 長時間,形如 (2003-12-05 13:04:06)
          function strDateTime(str)
          {
          var reg = /^(d)(-│/)(d)2(d) (d):(d):(d)$/;
          var r = str.match(reg);
          if(r==null)return false;
          var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
          return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
          }

          2.4 只有年和月。形如(2003-05,或者2003-5)

          2.5 只有小時和分鐘,形如(12:03)
          3、表單類
          3.1 所有的表單的值都不能為空
          <input onblur="if(this.value.replace(/^s+│s+$/g,'')=='')alert('不能為空!')">

          3.2 多行文本框的值不能為空。
          3.3 多行文本框的值不能超過sMaxStrleng
          //檢驗文本框中內容是否超長
          function CheckTextareaLength(val, max_length) {
          var str_area=document.forms[0].elements[val].value;
          if (str_area!=null&&str_area.length > max_length)
          {
          alert("字段文字超長,最多可輸入" + max_length +"個字符,請重新輸入!");
          document.forms[0].elements[val].focus();
          document.forms[0].elements[val].select();
          return false;
          }
          return true;
          }
          3.4 多行文本框的值不能少于sMixStrleng
          3.5 判斷單選框是否選擇。

          function CheckRadio(val,msg1,msg2)
          {
          var is_radio=document.forms[0].elements[val];
          var s_msg1=(msg1==null ││ msg1=="")? "請選擇 radio!":msg1;
          var s_msg2=(msg2==null ││ msg2=="")? "沒有可選的 radio!":msg2;

          if(is_radio)
          {
          if (document.forms[0].elements[val].value != null)
          {
          if (document.forms[0].elements[val].checked)
          {
          return true;
          }
          else
          {
          alert(s_msg1);
          return false;
          }
          }
          else
          {
          var check_length = document.forms[0].elements[val].length;
          var i_count=0
          for(var i=0;i<check_length;i++)
          {
          if (document.forms[0].elements[val](i).checked)
          {
          i_count=i_count+1;
          return true;
          }
          }
          if(i_count==0)
          {
          alert(s_msg1);
          return false;
          }
          }
          }//
          else
          {
          alert(s_msg2);
          return false;
          }

          }
          3.6 判斷復選框是否選擇.
          function CheckCheckbox(val,msg1,msg2)
          {
          var is_radio=document.forms[0].elements[val];
          var s_msg1=(msg1==null ││ msg1=="")? "請選擇CheckBox!":msg1;
          var s_msg2=(msg2==null ││ msg2=="")? "沒有可選的CheckBox!":msg2;

          if(is_radio)
          {
          if (document.forms[0].elements[val].value != null)
          {
          if (document.forms[0].elements[val].checked)
          {
          return true;
          }
          else
          {
          alert(s_msg1);
          return false;
          }
          }
          else
          {
          var check_length = document.forms[0].elements[val].length;
          var i_count=0
          for(var i=0;i<check_length;i++)
          {
          if (document.forms[0].elements[val](i).checked)
          {
          i_count=i_count+1;
          return true;
          }
          }
          if(i_count==0)
          {
          alert(s_msg1);
          return false;
          }
          }
          }//
          else
          {
          alert(s_msg2);
          return false;
          }

          }
          3.7 復選框的全選,多選,全不選,反選
          <form name=hrong>
          <input type=checkbox name=All onclick="checkAll('mm')">全選<br/>
          <input type=checkbox name=mm onclick="checkItem('All')"><br/>
          <input type=checkbox name=mm onclick="checkItem('All')"><br/>
          <input type=checkbox name=mm onclick="checkItem('All')"><br/>
          <input type=checkbox name=mm onclick="checkItem('All')"><br/>
          <input type=checkbox name=mm onclick="checkItem('All')"><br/><br/>


          <input type=checkbox name=All2 onclick="checkAll('mm2')">全選<br/>
          <input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
          <input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
          <input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
          <input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
          <input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>

          </form>

          <SCRIPT LANGUAGE="JavaScript">
          function checkAll(str)
          {
          var a = document.getElementsByName(str);
          var n = a.length;
          for (var i=0; i<n; i++)
          a.checked = window.event.srcElement.checked;
          }
          function checkItem(str)
          {
          var e = window.event.srcElement;
          var all = eval("document.hrong."+ str);
          if (e.checked)
          {
          var a = document.getElementsByName(e.name);
          all.checked = true;
          for (var i=0; i<a.length; i++)
          {
          if (!a.checked){ all.checked = false; break;}
          }
          }
          else all.checked = false;
          }
          </SCRIPT>


          3.8 文件上傳過程中判斷文件類型
          <input type=file onchange="alert(this.value.match(/^(.*)(.)(.)$/)[3])">

          4、字符類
          4.1 判斷字符全部由a-Z或者是A-Z的字字母組成
          <input onblur="if(/[^a-zA-Z]/g.test(this.value))alert('有錯')">
          4.2 判斷字符由字母和數字組成。
          <input onblur="if(/[^0-9a-zA-Z]/g.test(this.value))alert('有錯')">

          4.3 判斷字符由字母和數字,下劃線,點號組成.且開頭的只能是下劃線和字母
          /^([a-zA-z_])([w]*)$/g.test(str)

          4.4 字符串替換函數.Replace();
          5、瀏覽器類
          5.1 判斷瀏覽器的類型
          window.navigator.appName
          5.2 判斷ie的版本
          window.navigator.appVersion
          5.3 判斷客戶端的分辨率
          window.screen.height; window.screen.width;

          6、結合類
          6.1 email的判斷。
          function ismail(mail)
          {
          return(new RegExp(/^w+((-w+)│(.w+))*@[A-Za-z0-9]+((.│-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/).test(mail));
          }

          6.2 手機號碼的驗證
          6.3 身份證的驗證
          function isIdCardNo(num)
          {
          if (isNaN(num)) {alert("輸入的不是數字!"); return false;}
          var len = num.length, re;
          if (len == 15)
          re = new RegExp(/^(d)()?(d)(d)(d)(d)$/);
          else if (len == 18)
          re = new RegExp(/^(d)()?(d)(d)(d)(d)(d)$/);
          else {alert("輸入的數字位數不對!"); return false;}
          var a = num.match(re);
          if (a != null)
          {
          if (len==15)
          {
          var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
          var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
          }
          else
          {
          var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
          var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
          }
          if (!B) {alert("輸入的身份證號 "+ a[0] +" 里出生日期不對!"); return false;}
          }
          return true;
          }
             另外一個
          <script>
          var aCity=

          function cidInfo(sId){
          var iSum=0
          var info=""
          if(!/^d(d│x)$/i.test(sId))return false;
          sId=sId.replace(/x$/i,"a");
          if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地區";
          sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
          var d=new Date(sBirthday.replace(/-/g,"/"))
          if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
          for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
          if(iSum%11!=1)return "Error:非法證號";
          return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
          }

          document.write(cidInfo("380524198002300016"),"<br/>");
          document.write(cidInfo("340524198002300019"),"<br/>")
          document.write(cidInfo("340524197711111111"),"<br/>")
          document.write(cidInfo("34052419800101001x"),"<br/>");
          </script>
          6.4 ip地址校驗
          <SCRIPT LANGUAGE="JavaScript">
          function isip(s){
          var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
          var re=s.split(".")
          return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
          }

          var s="202.197.78.129";
          alert(isip(s))
          </SCRIPT>
          6.5 .加sp1后還能用的無邊框窗口!!
          <HTML XMLNS:IE>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <IE:Download ID="include" STYLE="behavior:url(#default#download)" />
          <title>Chromeless Window</title>

          <SCRIPT LANGUAGE="JScript">
          /*--- Special Thanks For andot ---*/

          /*
          This following code are designed and writen by Windy_sk <seasonx@163.net>
          You can use it freely, but u must held all the copyright items!
          */

          /*--- Thanks For andot Again ---*/

          var CW_width = 400;
          var CW_height = 300;
          var CW_top = 100;
          var CW_left = 100;
          var CW_url = "/";
          var New_CW = window.createPopup();
          var CW_Body = New_CW.document.body;
          var content = "";
          var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(), onmousedown=function());background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";

          //Build Window
          include.startDownload(CW_url, function(source));

          function insert_content(){
          var temp = "";
          CW_Body.style.overflow = "hidden";
          CW_Body.style.backgroundColor = "white";
          CW_Body.style.border = "solid black 1px";
          content = content.replace(/<a ([^>]*)>/g,"<a onclick='parent.open(this.href);return false' >");
          temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";
          temp += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default' ondblclick="Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();" onmouseup='parent.drag_up(event)' onmousemove='parent.drag_move(event)' onmousedown='parent.drag_down(event)' onselectstart='return false' oncontextmenu='return false'>";
          temp += "<td style='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>";
          temp += "<td style='color:#ffffff;padding-right:5px;' align=right>";
          temp += "<span id=Help onclick="alert('Chromeless Window For IE6 SP1 - Ver 1.0\n\nCode By Windy_sk\n\nSpecial Thanks For andot')" style=""+CSStext+"font-family:System;padding-right:2px;">?</span>";

          posted @ 2007-06-14 13:52 siwei 閱讀(200) | 評論 (0)編輯 收藏

          熟練window對象的open、close、alert、confirm、prompt、setTimeout、clearTimeout、setInterval、clearInterval、moveBy、resizeBy、scrollBy方法的使用  
           掌握window對象的moveTo、resizeTo、scrollTo、print方法的使用  
           熟練掌握window對象的status、location、name、self、opener屬性的使用  Window對象是客戶端javascript最高層對象之一,只要打開瀏覽器窗口,不管該窗口中是否有打開的網頁,當遇到BODY、FRAMESET或FRAME元素時,都會自動建立window對象的實例。另外,該對象的實例也可由window.open()方法創建。由于window對象是其它大部分對象的共同祖先,在調用window對象的方法和屬性時,可以省略window對象的引用。例如:window.document.write()可以簡寫成: document.write()。  在窗口中觖發本窗口對象的任何方法和屬性時可以省去窗口的實例名稱。例如給當前的myWin窗口設置status屬性時,可以只用status而不用myWin.status。但是,在事件處理中調用location屬性、close()方法或open()方法時必須使用實例名稱。  
           6-2-1 window對象的方法 
           window對象有以下方法: 

           open  
           close  
           alert  
           confirm  
           prompt  
           setTimeout  
           clearTimeout  
           setInterval  
           clearInterval  
           moveBy  
           moveTo  
           resizeBy  
           resizeTo  
           scrollBy  
           scrollTo  
           find  
           back  
           forward  
           home  
           stop  
           print  
           blur  
           focus  
           captureEvent  
           enableExternalCapture  
           disableExternalCapture  
           handleEvent  
           releaseEvent  
           routeEvent  
           scroll  

             1. open方法 
             語法格式: 

           window.open(URL,窗口名稱,窗口風格) 
             功能:打開一個新的窗口,并在窗口中裝載指定URL地址的網頁。 

             說明: 

           open方法用于打開一個新的瀏覽器窗口,并在新窗口中裝入一個指定的URL地址 

          ;  
           open方法在打開一個新的瀏覽器窗口時,還可以指定窗口的名稱(第二個參數);  
           open方法在打開一個新的瀏覽器窗口時,還可以指定窗口的風格(第三個參數), 

          窗口風格有以下選項,這些選項可以多選,如果多選,各選項之間用逗號分隔:  
           toolbar:指定窗口是否有標準工具欄。當該選項的值為1或yes時,表示有標準 

          工具欄,當該選項的值為0或no時,表示沒有標準工具欄;  
           location:指定窗口是否有地址工具欄,選項的值及含義與toolbar相同;  
           directories:指定窗口是否有鏈接工具欄,選項的值及含義與toolbar相同;  
           status:指定窗口是否有狀態欄,選項的值及含義與toolbar相同;  
           menubar:指定窗口是否有菜單,選項的值及含義與toolbar相同;  
           scrollbar:指定當前窗口文檔大于窗口時是否有滾動條,選項的值及含義與 

          toolbar相同;  
           resizable:指定窗口是否可改變大小,選項的值及含義與toolbar相同;  
           width:以像素為單位指定窗口的寬度,已被innerWidth取代;  
           height:以像素為單位指定窗口的高度,已被innerHeight取代;  
           outerWidth:以像素為單位指定窗口的外部寬度;  
           outerHeight:以像素為單位指定窗口的外部高度;  
           left:以像素為單位指定窗口距屏幕左邊的位置;  
           top:以像素為單位指定窗口距屏幕頂端的位置;  
           alwaysLowered:指定窗口隱藏在所有窗口之后,選項的值及含義與toolbar相同 

          ;  
           alwaysRaised:指定窗口浮在所有窗口之上,選項的值及含義與toolbar相同;  
           dependent:指定打開的窗口為當前窗口的一個子窗口,并隨著父窗口的關閉而 

          關閉,選項的值及含義與toolbar相同;  

           hotkeys:在沒有菜單欄的新窗口中設置安全退出的熱鍵,選項的值及含義與 

          toolbar相同;  

           innerHeight:設定窗口中文檔的像素高度;  

           innerWidth:設定窗口中文檔的像素寬度;  

           screenX:設定窗口距離屏幕左邊界的像素長度;  

           screenY:設定窗口距離屏幕上邊界的像素長度;  

           titleBar:指明標題欄是否在新窗口中可見,選項的值及含義與toolbar相同;  

           z-look:指明當窗口被激活時,不能浮在其它窗口之上,選項的值及含義與 

          toolbar相同。  

           open方法返回的是該窗口的引用。  

           小技巧:該方法經常用于在打開一個網頁時自動打開另一個窗口。 

           例6-2-1:編制一個小程序,它用于在打開當前窗口時自動打開另一個窗口,要 

          求該窗沒有標準工具欄、地址欄、鏈接工具欄、菜單欄,但有狀態欄,窗口中打 

          開的網頁地址為:http://www.dlrtvu.edu.cn。 

           2. close方法 
           語法格式: 

           window.close() 
           功能:close方法用于自動關閉瀏覽器窗口。 

            3. alert方法 
           語法格式: 

           window.alert(提示字符串) 
           功能:彈出一個警告框,在警告框內顯示提示字符串文本。 

            4. confirm方法 
           語法格式: 

           window.confirm(提示字符串) 
           功能:顯示一個確認框,在確認框內顯示提示字符串,當用戶單擊“確定”按鈕 

          時該方法返回true,單擊“取消”時返回false。 

            5. prompt方法 
           語法格式: 

           window.prompt(提示字符串,缺省文本) 
           功能:顯示一個輸入框,在輸入框內顯示提示字符串,在輸入文本框顯示缺省文 

          本,并等待用戶輸入,當用戶單擊“確定”按鈕時,返回用戶輸入的字符串,當 

          單擊“取消”按鈕時,返回null值。 

            6. setTimeout方法 
           語法格式: 

           window.setTimeout(代碼字符表達式,毫秒數) 
           功能:定時設置,當到了指定的毫秒數后,自動執行代碼字符表達式。 

           7. clearTimeout方法 
           語法格式: 

           window.clearTimeout(定時器) 
           功能:取消以前的定時設置,其中的參數是用setTimeout設置時的返回值。 

            8. setInterval方法 
           語法格式: 

           window.setInterval(代碼字符表達式,毫秒數) 
           功能:設定一個時間間隔后(第二個參數),反復執行“代碼字符表達式”的內容 

           9. clearInterval方法 
           語法格式: 

           window.clearInterval(時間間隔器) 
           功能:取消setInterval設置的定時。其中的參數是setInterval方法的返回值。 

           10. moveBy方法 
           語法格式: 

           window.moveBy(水平位移量,垂直位移量) 
           功能:按照給定像素參數移動指定窗口。第一個參數是窗口水平移動的像素,第 

          二個參數是窗口垂直移動的像素。 

            11.moveTo方法 
           語法格式: 

           window.moveTo(x,y) 
           功能:將窗口移動到指定的指定坐標(x,y)處。 

           12. resizeBy方法 
           語法格式: 

           window.resizeBy(水平,垂直) 
           功能:將當前窗口改變指定的大小(x,y),當x、y的值大于0時為擴大,小于0時 

          為縮小。 

           13. resizeTo方法 
           語法格式: 

           window.resizeTo(水平寬度,垂直寬度) 
           功能:將當前窗口改變成(x,y)大小,x、y分別為寬度和高度。 

           14. scrollBy方法 
           語法格式: 

           window.scrollBy(水平位移量,垂直位移量) 
           功能:將窗口中的內容按給定的位移量滾動。參數為正數時,正向滾動,否則反 

          向滾動。 

           15. scrollTo方法 
           語法格式: 

           window.scrollTo(x,y) 
           功能:將窗口中的內容滾動到指定位置。 

           16.find方法 
           語法格式: 

           window.find() 
           功能:當觸發該方法時,將彈出一個“find”(查找)對話窗口,并允許用戶在觸 

          發find方法的頁面中查找一個字符串。 

           注:該屬性在IE5.5及Netscape6.0中都不支持。 

           17. back方法 
           語法格式: 

           window.back() 
           功能:模擬用戶點擊瀏覽器上的“后退”按鈕,將頁面轉到瀏覽器的上一頁。 

           說明:僅當當前頁面存在上一頁時才能進行該操作。 

           注:IE5.5不支持該方法,Netscape6.0支持。 

           18. forward方法 
           語法格式: 

           window.forward() 
           功能:模擬用戶點擊瀏覽器上的“前進”按鈕,將頁面轉到瀏覽器的下一頁。 

           說明:僅當當前頁面存在下一頁時才能進行該操作。 

           注:IE5.5不支持該方法,Netscape6.0支持。 

           19. home方法 
           語法格式: 

           window.home() 
           功能:模擬用戶點擊瀏覽器上的“主頁”按鈕,將頁面轉到指定的頁面上。 

           注:IE5.5不支持該方法,Netscape6.0支持。 

           20. stop方法 
           語法格式: 

           window.stop() 
           功能:模擬用戶點擊瀏覽器上的“停止”按鈕,終止瀏覽器的下載操作。 

           注:IE5.5不支持該方法,Netscape6.0支持。 

           21. print方法 
           語法格式: 

           window.print() 
           功能:模擬用戶點擊瀏覽器上的“打印”按鈕,通知瀏覽器打開打印對話框打印 

          當前頁。 
                 
           22. blur方法 
           語法格式: 

           window.blur() 
           功能:從窗口中移出焦點。當與focus方法合用時必須小心,因為可能導致焦點 

          不斷移進移出。 

           23. focus方法 
           語法格式: 

           window.focus() 
           功能:使窗口中得到焦點。當與blur方法合用時必須小心,因為可能導致焦點不 

          斷移進移出。 

           24. captureEvent方法 
           語法格式: 

           window.captureEvent(Event)        
           window.captureEvent(事件1|事件2|...|事件n) 
           功能:捕捉指定參數的所有事件。由于能夠捕獲哪些由本地程序自己處理的事件 

          ,所以程序員可以隨意定義函數來處理事件。如果有多個事件需要捕捉,各事件 

          之間用管道符“|”隔開。可捕捉的事件類型如下: 

           Event.ABORT  

           Event.BLUR  

           Event.CHANGE  

           Event.CLICK  

           Event.DBLCLICK  

           Event.DRAGDROP  

           Event.ERROR  

           Event.FOCUS  

           Event.KEYDOWN  

           Event.KEYPRESS  

           Event.KEYUP  

           Event.LOAD  

           Event.MOUSEDOWN  

           Event.MOUSUEMOVE  

           Event.MOUSEOUT  

           Event.MOUSEOVER  

           Event.MOUSEUP  

           Event.MOVE  

           Event.RESET  

           Event.RESIZE  

           Event.SELECT  

           Event.SUBMIT  

           Event.UNLOAD  

           25. enableExternalCapture事件 
           語法格式: 

           window.enableExternalCapture(event) 
           功能:enableExternalCapture方法用于捕捉通過參數傳入的外部事件。 

           26. disableExternalCapture事件 
           語法格式: 

           window.disableExternalCapture() 
           功能:取消enableExternalCapture方法的設置,終止對外部事件的捕捉。 

           27. handleEvent事件 
           語法格式: 

           window.handleEvent(event) 
           功能:觸發指定事件的事件處理器。 

           28. releaseEvent事件 
           語法格式: 

           window.releaseEvent(event) 
           window.releaseEvent(事件1|事件2|...|事件n) 
           功能:釋放通過參數傳入的已被捕捉的事件,這些事件是由 

          window.captureEvent方法設置的,可釋放的事件與captureEvent相同。 

           29. routeEvent事件 
           語法格式: 

           window.releaseEvent(event) 
           功能:把被捕捉類型的所有事件轉交給標準事件處理方法進行處理,可轉交的事 

          件與captureEvent相同。 

           30 scroll事件 
           語法格式: 

           window.scroll(X坐標,Y坐標) 
           功能:將窗口移動到指定的坐標位置。 

           6-2-2 window對象的屬性 
           window對象具有如下屬性: 

           status  

           statusbar  

           statusbar.visible  

           defaultstatus  

           location  

           locationbar  

           locationbar.visible  

           self  

           name  

           closed  

           frames  

           frames.length  

           length  

           document  

           history  

           innerHeight  

           innerWidth  

           menubar  

           menubar.visible  

           opener  

           outerHeight  

           outerWidth  

           pageXOffset  

           pageYOffset  

           parent  

           personalbar  

           personalbar.visible  

           scrollbar  

           scrollbar.visible  

           toolbar  

           toolbar.visible  

           top  

           1. status屬性 
           語法格式: 

           window.status=字符串 
           功能:設置或給出瀏覽器窗口中狀態欄的當前顯示信息。 

           小技巧:可以使用該屬性設置瀏覽器窗口狀態欄信息。 

            2. statusbar屬性 
           語法格式: 

           window.statusbar.屬性 
           功能:statusbar屬性本身也是一個對象,用于訪問它自已的visible屬性從而確 

          定狀態欄是否可見。 

           注:IE5.5瀏覽器不支持該屬性。 

           3. statusbar.visible屬性 
           語法格式: 

           window.statusbar.visible 
           功能:檢查狀態欄是否可見,如果可見則返回true,反之返回false。 

           注:IE5.5瀏覽器不支持該屬性。 

            4. defaultstatus屬性 
           語法格式: 

           window.defaultstatus[=字符串] 
           功能:defaultstatus屬性值是瀏覽器窗中狀態欄的默認顯示信息。 

            5.location屬性 
           語法格式: 

           window.location=URL 
           功能:給出當前窗口的URL信息或指定打開窗口的URL。 

            6. locationbar屬性 
           語法格式: 

           window.locationbar.屬性 
           功能:locationbar屬性也可以看成是一個子對象,這個屬性用來獲取它自已的 

          visible屬性來確定位置欄是否可見。 

           到目前為止,該屬性只有一個子屬性:visible。 

           注:IE5.5不支持該屬性。 

           7. locationbar.visible屬性 
           語法格式: 

           window.locationbar.visible 
           功能:返回位置欄是否可見,如果可見返回true,反之返回false。 

           注:IE5.5不支持該屬性。 

           8. self屬性 
           語法格式: 

           window.self.方法 
           window.self.屬性 
           功能:該屬性包含當前窗口的標志,利用這個屬性,可以保證在多個窗口被打開 

          的情況下,正確調用當前窗口內的函數或屬性而不會發生混亂。 

            9. name屬性 
           語法格式: 

           window.name=名稱 
           功能:返回窗口名稱,這個名稱是由window.open()方法創建新窗口時給定的。 

          在javascript1.0版本中,這個屬性只能用于讀取窗口名稱,而到了 

          javascript1.1版本時,可以用這個屬性給一個不是用window.open()方法創建的 

          窗口指定一個名稱。 

            10. closed屬性 
           語法格式: 

           window.closed 
           功能:closed屬性用于返回指定窗口的實例是否已經關閉,如果關閉,返回true 

          ,反之返回flase。 

           11. frames屬性 
           語法格式: 

           window.frames["框架名稱"] 
           window.frames[數值] 
           功能:frames屬性是一個數組,用來存儲文檔中每一個由元素創建的子窗口(框 

          架)實例,其中的下標即可以是次序號也可以是用FRAME元素的NAME屬性指定的名 

          稱來得到并使用。 

           12. frames.length屬性 
           語法格式: 

           window.frames.length 
           功能:frames.length屬性用于給出文檔中子窗口(框架)實例的個數。 

           13. length屬性 
           語法格式: 

           window.length 
           功能:length屬性返回一個窗口內的子窗口數目,該屬性與 

          window.frame.length屬性的值相同。 

           14. document屬性 
           語法格式: 

           window.document.事件 
           window.document.方法 
           window.document.屬性 
           功能:window對象的子對象document是javascript的核心對象,在腳本中遇到 

          BODY元素時創建一個實例。 

           15. history屬性 
           語法格式: 

           window.history[數值] 
           window.history.方法() 
           window.history.屬性 
           window對象的子對象history是javascript的核心對象之一,該屬性包含了一個 

          已訪問過頁面的名稱和URL的數組。 

           16. innerHeight屬性 
           語法格式: 

           window.innerHeight=數值 
           功能:返回或指定瀏覽器窗口中文檔的像素高度,這個高度不包括任何工具欄和 

          組成窗口的頁面修飾高度。 

           注:IE5.5不支持該屬性。 

           17. innerWidth屬性 
           語法格式: 

           window.innerHeight=數值 
           功能:返回或指定瀏覽器窗口中文檔的像素寬度,這個寬度不包括任何工具欄和 

          組成窗口的頁面修飾寬度。 

           注:IE5.5不支持該屬性。 

           18. menubar屬性 
           語法格式: 

           window.menubar.屬性 
           功能:menubar屬性也可以看成是一個子對象,這個屬性用來獲取它自已的 

          visible屬性來確定菜單欄是否可見。 

           到目前為止,該屬性只有一個子屬性:visible。 

           注:IE5.5不支持該屬性。 

           19. menubar.visible屬性 
           語法格式: 

           window.menubar.visible 
           功能:menubar.visible屬性用于返回菜單欄是否可見,如果可見返回true,反 

          之返回false。 

           注:IE5.5不支持該屬性。 

           20. opener屬性 
           語法格式: 

           window.opener 
           window.opener.方法 
           window.opener.屬性 
           功能:opener屬性與打開該窗口的父窗口相聯系,當訪問子窗口中operer屬性時 

          ,返回的是父窗口。通過該屬性,可以使用父窗口對象中的方法和屬性。 

           21. outerHeight屬性 
           語法格式: 

           window.outerHeight 
           功能:outerHeight屬性用于訪問瀏覽器窗口的像素高度,該高度包括工具欄和 

          裝飾邊的高度。 

           注:IE5.5不支持該屬性。 

           22. outerWidth屬性 
           語法格式: 

           window.outerWidth 
           功能:outerWidth屬性用于訪問瀏覽器窗口的像素寬度,該寬度包括工具欄和裝 

          飾邊的寬度。 

           注:IE5.5不支持該屬性。 

           23. pageXOffset屬性 
           語法格式: 

           window.pageXOffset=數值 
           功能:指定瀏覽器窗口中文檔左上角在窗口中的當前水平像素位置。在利用 

          moveTo移動之前,可以通過該屬性來決定是否需要移動窗口。因為該屬性返回了 

          可見文檔相對整個頁面的當前位置。 

           注:IE5.5不支持該屬性。 

           24. pageYOffset屬性 
           語法格式: 

           window.pageYOffset=數值 
           功能:指定瀏覽器窗口中文檔左上角在窗口中的當前垂直像素位置。在利用 

          moveTo移動之前,可以通過該屬性來決定是否需要移動窗口。因為該屬性返回了 

          可見文檔相對整個頁面的當前位置。 

           注:IE5.5不支持該屬性。 

           25. parent屬性 
           語法格式: 

           window.parent.frames[數值] 
           window.parent.framesName 
           功能:訪問各個子窗口(多框架)所在的父窗口。 

           26. personalbar屬性 
           語法格式: 

           window.personalbar.屬性 
           功能:personalbar屬性本身也是一個對象,用于訪問其自身的visible屬性來確 

          定個人欄是否可見。 

           注:IE5.5不支持該屬性。 

           27. personalbar.visible屬性 
           語法格式: 

           window.personalbar.visible 
           功能:確定個人欄是否可見,如果可見則返回true,反之返回false。 

           注:IE5.5不支持該屬性。 

           28. scrollbars屬性 
           語法格式: 

           window.scrollbars.屬性 
           功能:scrollbars屬性本身也是一個對象,用于訪問其自身的visible屬性來確 

          定滾動欄是否可見。 

           注:IE5.5不支持該屬性。 

           29. scrollbars.visible屬性 
           語法格式: 

           window.scrollbars.visible 
           功能:scrollbars.visible用于確定滾動欄是否可見,如果可見則返回true,反 

          之返回false。 

           注:IE5.5不支持該屬性。 

           30. toolbar屬性 
           語法格式: 

           window.toolbar.屬性 
           功能:toolbar屬性本身也是一個對象,用于訪問它自已的visible屬性從而確定 

          工具欄是否可見。 

           注:IE5.5不支持該屬性。 

           31. toolbar.visible屬性 
           語法格式: 

           window.toolbar.visible 
           功能:toolbar.visible屬性用于檢查工具欄是否可見,如果可見則返回true, 

          反之返回false。 

           注:IE5.5不支持該屬性。 

           32. top屬性 
           語法格式: 

           window.top.frames[數值] 
           window.top.frameName 
           window.top.方法() 
           window.top.屬性 
           功能:window對象的top屬性用于包含所有裝入瀏覽器的子窗口(多框架)的最頂 

          posted @ 2007-04-09 11:01 siwei 閱讀(389) | 評論 (0)編輯 收藏

          僅列出標題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 乌审旗| 蕲春县| 丹东市| 彰武县| 龙游县| 建昌县| 富裕县| 大英县| 洛南县| 简阳市| 砚山县| 江源县| 双鸭山市| 武鸣县| 白朗县| 临夏县| 姜堰市| 佳木斯市| 西安市| 沾化县| 齐河县| 南安市| 晋中市| 兴海县| 百色市| 宁乡县| 开封县| 丰县| 江达县| 松原市| 河源市| 武义县| 邯郸县| 射洪县| 抚顺市| 砚山县| 抚松县| 枣阳市| 疏附县| 克什克腾旗| 五台县|