經典 正則表達技術文檔

正則表達式語法
一個正則表達式就是由普通字符(例如字符 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} m 和 n 均爲非負整數,其中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 中使用

S Matches 集合,在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 匹配 x 或 y。例如,'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 的後向引用。如果前面的

條件都不滿足,若 n 和 m 均爲八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。

\nml 如果 n 爲八進制數字 (0-3),且 m 和 l 均爲八進制數字 (0-7),則匹配八進制轉義值 nml。

\un 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符。例如, \? 匹配版權符號 (?)。

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

值。

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


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

普通字符

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

字,所有標點符號以及一些符號。

最簡單的正則表達式是一個單獨的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式 'A'

可以匹配所搜索字符串中任何位置出現的字母 'A'。這裏有一些單字符正則表達式模式的示例:


代碼
/a/   
/7/   
/M/   

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

代碼
"a"  
"7"  
"M"  

可以將多個單字符組合在一起得到一個較大的表達式。例如,下面的 JScript 正則表達式不是別的,就是通過

組合單字符表達式 'a'、'7'以及 'M' 所創建出來的一個表達式。
 

/a7M/
等價的 VBScript 表達式爲:

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

測試是否匹配不應用exec方法,而應該用test方法。exec用於返回包含查找結果的一個數組。


代碼
function isDigit(s)   
{   
var patrn=/^[0-9]{1,20}$/;   
if (!patrn.exec(s)) return false  
return tr  
}  

成爲

代碼
function isDigit(s)   
{   
var patrn=/^[0-9]{1,20}$/;   
if (patrn.test(s)) return tr  
return false;   
}  
 

RegExp對象的$1...$9 屬性好象沒說到。

); </script> <!-- password有效性驗證函數--> <script lang ge=javascript runat=server> function

TestPwd(src) { var sxf,regex; sxf='^[\\w]{6,12}

應用也很簡單,以上函數均是應用在服務器端,若用在客戶端需要把runat=server去掉。我舉兩個例子:
IF isIPaddress.test(str)=false THEN
Response.Write"IP 地址錯誤,請重新輸入。"
Response.End
END IF
IF TestPwd(str)=false THEN
Response.Write"密碼錯誤,請重新輸入。"
Response.End
END IF

事實上你只要熟練掌握正則表達式的應用,對於判斷字符串輸入的正確性那簡直是小菜一碟。正則表達式還能用

於字符串替換, b語法就是用正則表達式的替換做成的。
收藏自:http://www.netop.cc/doc.asp?cg=37&did=23

JS的正則表達式

//最基本也是最常用的一些表達式 :

匹配中文字符的正則表達式: [\一-\龥]
評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了

匹配雙字節字符(包括漢字在內):[^\x00-\xff]
評註:可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

匹配空白行的正則表達式:\n\s*\r
評註:可以用來刪除空白行

匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? />
評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的嵌套標記依舊無能爲力

匹配首尾空白字符的正則表達式:^\s*|\s*$
評註:可以用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),非常有用的表達式

匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
評註:表單驗證時很實用

匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*
評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求

匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評註:表單驗證時很實用

匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
評註:匹配形式如 0511-4405222 或 021-87888822

匹配騰訊QQ號:[1-9][0-9]{4,}
評註:騰訊QQ號從10000開始

匹配中國郵政編碼:[1-9]\d{5}(?!\d)
評註:中國郵政編碼爲6位數字

匹配身份證:\d{15}|\d{18}
評註:中國的身份證爲15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
評註:提取ip地址時有用

匹配特定數字:
^[1-9]\d*$    //匹配正整數
^-[1-9]\d*$   //匹配負整數
^-?[1-9]\d*$   //匹配整數
^[1-9]\d*|0$  //匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$   //匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮點數(負浮點數 + 0)
評註:處理大量數據時有用,具體應用時注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26個英文字母組成的字符串
^[A-Z]+$  //匹配由26個英文字母的大寫組成的字符串
^[a-z]+$  //匹配由26個英文字母的小寫組成的字符串
^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字符串
^\w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串
評註:最基本也是最常用的一些表達式

//

正則表達式用於字符串處理,表單驗證等場合,實用高效,但用到時總是不太把握,以致往往要上網查一番。我

將一些常用的表達式收藏在這裏,作備忘之用。本貼隨時會更新。
1、非負整數:^\d+$

2、正整數:^[0-9]*[1-9][0-9]*$

3、非正整數:^((-\d+)|(0+))$

4、負整數:^-[0-9]*[1-9][0-9]*$

5、整數:^-?\d+$

6、非負浮點數:^\d+(\.\d+)?$

7、正浮點數:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9 ]+)|([0-9]*[1-9][0-9]*))$

8、非正浮點數:^((-\d+\.\d+)?)|(0+(\.0+)?))$

9、負浮點數:^(-((正浮點數正則式)))$

10、英文字符串:^[A-Za-z]+$

11、英文大寫串:^[A-Z]+$

12、英文小寫串:^[a-z]+$

13、英文字符數字串:^[A-Za-z0-9]+$

14、英數字加下劃線串:^\w+$

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
17、郵政編碼:^[1-9]\d{5}$

18、中文:^[\Α-\¥]+$

19、電話號碼:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手機號碼:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$

21、雙字節字符(包括漢字在內):^\x00-\xff

22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那樣的trim函數)

23、匹配HTML標記:<(.*)>.*<\/\1>|<(.*) \/>

24、匹配空行:\n[\s| ]*\r

25、提取信息中的網絡鏈接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

26、提取信息中的郵件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

27、提取信息中的圖片鏈接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?

28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)

29、提取信息中的中國手機號碼:(86)*0*13\d{9}

30、提取信息中的中國固定電話號碼:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}

31、提取信息中的中國電話號碼(包括移動和固定電話):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}

32、提取信息中的中國郵政編碼:[1-9]{1}(\d+){5}

33、提取信息中的浮點數(即小數):(-?\d*)\.?\d+

34、提取信息中的任何數字 :(-?\d*)(\.\d+)?

35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)

36、電話區號:/^0\d{2,3}$/

37、騰訊QQ號:^[1-9]*[1-9][0-9]*$

38、帳號(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

匹配中文字符的正則表達式: [\一-\龥]

匹配雙字節字符(包括漢字在內):[^\x00-\xff]

應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)

String.prototype.len=function (){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正則表達式:\n[\s| ]*\r

匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正則表達式:(^\s*)|(\s*$)

應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正則表達式分解和轉換IP地址:

下面是利用正則表達式匹配IP地址,並將IP地址轉換成對應數值的Javascript程序:

function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配網址URL的正則表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正則表達式去除字串中重複的字符的算法程序:[注:此程序不正確,原因見本貼回覆]

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //結果爲:abcefgi

我原來在CSDN上發貼尋求一個表達式來實現去除重複字符的方法,最終沒有找到,這是我能想到的最簡單的實現

方法。思路是使用後向引用取出包括重複的字符,再以重複的字符建立第二個表達式,取到不重複的字符,兩者

串連。這個方法對於字符順序有要求的字符串可能不適用。

得用正則表達式從URL地址中提取文件名的javascript程 序,如下結果爲page1

s=" http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正則表達式限制網頁表單裏的文本框輸入內容:

用正則表達式限制只能輸入中文:οnkeyup="val=val.replace(/[^\一-\龥]/g,'')"

onbeforepaste=" clipboardData.setData('text',clipboardData.getData('text').replace(/[^\一-

\龥]/g,''))"

用正則表達式限制只能輸入全角字符: οnkeyup="val=val.replace(/[^\?-\?]/g,'')"

onbeforepaste="clipboardData.setData ('text',clipboardData.getData('text').replace(/[^\?-

\?]/g,''))"

用正則表達式限制只能輸入數字:οnkeyup="val=val.replace(/[^\d]/g,'')

"onbeforepaste="clipboardData.setData('text',clipboardData.getData ('text').replace(/[^\d]/g,''))"

用正則表達式限制只能輸入數字和英文:οnkeyup="val=val.replace(/[\W]/g,'')

"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

//

中國電話號碼驗證
匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
正則表達式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"

中國郵政編碼驗證
匹配形式如:215421
正則表達式 "d{6}"

電子郵件驗證
匹配形式如:[email protected]
正則表達式 "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"

身份證驗證
匹配形式如:15位或者18位身份證
正則表達式 "d{18}|d{15}"

常用數字驗證
正則表達式
"d{n}" n爲規定長度
"d{n,m}" n到m的長度範圍

非法字符驗證
匹配非法字符如:< > & / ' |
正則表達式 [^<>&/|'\]+

日期驗證
匹配形式如:20030718,030718
範圍:1900--2099
正則表達式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}
////////////////////前4行程序用於保護js代碼不被下載 // ////////////////////基本正則表達

式///////////////////
//非空驗證
function NotNull (str) { return (str!=""); }

//郵件地址驗證
function checkEmail (str) {
//郵件地址正則表達式
isEmail1=/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/;
//郵件地址正則表達式
isEmail2=/^.*@[^_]*$/;
//驗證郵件地址,返回結果
return (isEmail1.test(str)&&isEmail2.test(str)); }

//身份證驗證 function checkIDCard (str) {
//身份證正則表達式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
//身份證正則表達式(18位)
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
//驗證身份證,返回結果
return (isIDCard1.test(str)||isIDCard2.test(str)); }

//IP驗證 function checkIP (str) {
//IP正則表達式
IP='(25[0-5]|2[0-4]\\d|1\\d\\d|\\d\\d|\\d)'; IPdot=IP+'\\.'; isIPaddress=new RegExp

('^'+IPdot+IPdot+IPdot+IP+'$');
//驗證IP,返回結果
return (isIPaddress.test(str)); }

//主頁(網址)驗證
function checkHomepage (str) {
//主頁正則表達式 //
isHomepage=/^\w+([\.\-]\w)*$/; isHomepage=/^\w+(\.\w+)+\.\w+$/;
//驗證主頁,返回結果
return (isHomepage.test(str)); }

//是否數字
function isNum (str) { //isNumber=/^([1-9]\d*(\.\d+)?)|(\d+(\.\d+))$/; isNumber=/^\d+(\.\d+)?$/;
//驗證並返回結果
return (isNumber.test(str)); }

//是否整數
function isInt (str) { isInteger=/^\d+$/;
//驗證並返回結果
return (isInteger.test(str)); }

//是否字母
function isChar (str) { isCharacter=/^[A-Za-z]+$/;
//驗證並返回結果
return (isCharacter.test(str)); }
/////////////////////基本彈出窗口///////////////////
function checkBoolean(bv,i,w) { if(bv==false) { try{i.focus();}catch(e){} alert(w); return false;

} return tr }
////////////////////元素和取值判斷////////////////////
// 已選擇
function checkElement_selected(item,alert_str) { if(item.type=="select-one")return

checkElement_NotNull(item,alert_str); if(alert_str.length==0)alert_str=item.title+"爲必選項!";

rt=false; if(item.length>0) { for(i=0;i<item.length;i++){rt=rt||item[i].checked;} } else {

rt=item.checked } return checkBoolean(rt,item[0],alert_str); return tr; }
// 不爲空
function checkElement_NotNull(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_NotNull(v,a,w,g)); } function checkVal_NotNull

(v,i,w,g) { if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=NotNull(v); return

(checkBoolean(bv,i,w)); }
// 合法郵箱
function checkElement_IsEmail(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_IsEmail(v,a,w,g)); } function checkVal_IsEmail

(v,i,w,g) { if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=checkEmail(v); return

(checkBoolean(bv,i,w)); }
// 合法身份證
function checkElement_IsIDCard(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_IsIDCard(v,a,w,g)); } function checkVal_IsIDCard

(v,i,w,g) { if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=checkIDCard(v); return

(checkBoolean(bv,i,w)); }
// 合法IP
function checkElement_IsIP(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_IsIP(v,a,w,g)); } function checkVal_IsIP(v,i,w,g) {

if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=checkIP(v); return(checkBoolean(bv,i,w)); }
// 驗證數字
function checkElement_IsNum(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_IsNum(v,a,w,g)); } function checkVal_IsNum(v,i,w,g) {

if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=isNum(v); return(checkBoolean(bv,i,w)); }
// 驗證整數
function checkElement_IsInt(a,alert_str,g) { v=a.val; w=alert_str; if(alert_str.length==0)

w=a.title+"不能爲空!"; return(checkVal_IsInt(v,a,w,g)); } function checkVal_IsInt(v,i,w,g) {

if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=isInt(v); return(checkBoolean(bv,i,w)); }

// 驗證字母 function checkElement_IsChar(a,alert_str,g) { v=a.val; w=alert_str; if

(alert_str.length==0)w=a.title+"不能爲空!"; return(checkVal_IsChar(v,a,w,g)); } function

checkVal_IsChar(v,i,w,g) { if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, ""); bv=isChar(v);

return(checkBoolean(bv,i,w)); }
// 合法主頁
function checkElement_IsHomepage(a,alert_str,g) { v=a.val; w=alert_str; if

(alert_str.length==0)w=a.title+"不能爲空!"; return(checkVal_IsHomepage(v,a,w,g)); } function

checkVal_IsHomepage(v,i,w,g) { if(g!="NOT_TRIM")v=v.replace(/(^\s*)|(\s*$)/g, "");

bv=checkHomepage(v); return(checkBoolean(bv,i,w)); }


<SCRIPT Lang ge="JavaScript">
function checkIDCard (str)
{
var isIDCard1 = new Object();
var isIDCard2 = new Object();

//isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;

//
isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;

//驗證身份證,如果正確,提交到reg.asp頁面
if (isIDCard1.test(str)||isIDCard2.test(str))
{   
document.forms["form1"].action = "./reg.asp";
document.forms[0].s mit();
return tr;
}
alert("return false;

}請重新輸入正確的身份證碼!");
身份證正則表達式(18位)
</SCRIPT>
<Form name="form1" method=post onS mit="return checkIDCard(this.User_iden.val)">
    <input name="User_iden" id="User_iden" size="18">
    <input type="s mit" name="testcall" val="
</Form> 驗證身份證號碼">身份證正則表達式(15位)

//身份證正則表達式(15位)
isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;

//身份證正則表達式(18位)

isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;


梅花雨的腳本
<SCRIPT   LANG GE="JavaScript">
function   isIdCardNo(num)
{
    if   (isNaN(num))   {alert("輸入的不是數字!");   return   false;}
    var   len   =   num.length,   re;  
    if   (len   ==   15)
        re   =   new   RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
    else   if   (len   ==   18)
        re   =   new   RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\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   tr;
}
isIdCardNo("330103780133103");
isIdCardNo("330103780123103");
isIdCardNo("330103197801231030");
</SCRIPT>

更健壯的 地區和身份證的關係也判斷到 還有性別
<script>
var  

aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上

海",32:"江蘇",33:"浙江",34:"

安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海

南",50:"重慶",51:"四川",52:"貴州"

,53:"雲南",54:"西藏",61:"陝西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳

門",91:"國外"}
   
function   cidInfo(sId){
var   iSum=0
var   info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return   false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.s str(0,2))]==null)return   "Error:非法地區";
sBirthday=sId.s str(6,4)+"-"+Number(sId.s str(10,2))+"-"+Number(sId.s str(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.s str(0,2))]+","+sBirthday+","+(sId.s str(16,1)%2?"男":"女")
}

document.write(cidInfo("380524198002300016"),"<br/>");
document.write(cidInfo("340524198002300019"),"<br/>")
document.write(cidInfo("340524197711111111"),"<br/>")
document.write(cidInfo("34052419800101001x"),"<br/>");
document.write(cidInfo("220283198011200331"),"<br/>");
</script>
 

//校驗是否全由數字組成


代碼
function isDigit(s)   
{   
var patrn=/^[0-9]{1,20}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗登錄名:只能輸入5-20個以字母開頭、可帶數字、“_”、“.”的字串


代碼
function isRegisterUserName(s)   
{   
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗用戶姓名:只能輸入1-30個以字母開頭的字串


代碼
function isTrName(s)   
{   
var patrn=/^[a-zA-Z]{1,30}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
}}   
  
//校驗密碼:只能輸入6-20個字母、數字、下劃線   
[code]   
function isPasswd(s)   
{   
var patrn=/^(\w){6,20}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗普通電話、傳真號碼:可以“+”開頭,除數字外,可含有“-”


代碼
function isTel(s)   
{   
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;   
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗手機號碼:必須以數字開頭,除數字外,可含有“-”


代碼
function isMobil(s)   
{   
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗郵政編碼


代碼
function isPostalCode(s)   
{   
//var patrn=/^[a-zA-Z0-9]{3,12}$/;   
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

//校驗搜索關鍵字


代碼
function isSearch(s)   
{   
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\]   
        [\]\{\}:;'\,.<>?]{0,19}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
  
function isIP(s) //by zergling   
{   
var patrn=/^[0-9.]{1,20}$/;   
if (!patrn.exec(s)) return false  
return tr  
}   
 

正則表達式


代碼
"^\\d+$"  //非負整數(正整數 + 0)   
"^[0-9]*[1-9][0-9]*$"  //正整數    
"^((-\\d+)|(0+))$"  //非正整數(負整數 + 0)    
"^-[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   
"^[A-Za-z0-9_]*$" 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章