//身份證正規表示式(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{3}([0-9]|X)$/;
地區、性別和身份證進行判斷的正規表示式:
<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.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?"男":"女")
}
</script>
-------------
正規表示式全集
中國電話號碼驗證
匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
正規表示式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"
中國郵政編碼驗證
匹配形式如:215421
正規表示式 "d{6}"
電子郵件驗證
匹配形式如:justali@justdn.com
正規表示式 "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}
正規表示式是一個好東西,但是一般情況下,我們需要驗證的內容少之又少。下面是常用的17種正規表示式:
"^\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
[code]電子郵件 : @"^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$"
HTTP URL : @"^[url]http://([/url][\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
郵編 : @"\d{6}"
身份證 : @"\d{18}|\d{15}"
整數 : @"^\d{1,}$"
數值 : @"^-?(0|\d+)(\.\d+)?$"
日期 : @"^(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29))$)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))$"
合法的使用者名稱(以字母開頭,長度不小於4) : @"(([a-zA-Z]){1})+(\w{3,29})"[/code]
<="">[code]常用正規表示式語法例句
這裡有一些可能會遇到的正規表示式示例:
/^\[ \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 中使用 SubMatches 集合,在
Visual Basic Scripting Edition 中則使用 $0…$9 屬性。要
匹配圓括號字元,請使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹
配,不進行儲存供以後使用。這在使用 "或" 字元 (|) 來組合
一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表示式。
(?=pattern) 正向預查,在任何匹配 pattern 的字串開始處匹配查詢字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,'Windows (?=95|98|NT|2000)' 能匹配"Windows2000"中的"Windows",但不能匹配"Windows3 .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字元。例如, \u00A9 匹配版權符號 (?)。 [/code]
常用正規表示式
--------------------------------------------------------------------------------
匹配html的嵌入程式碼 [code]<[^>]*>[/code]
匹配[....]的嵌入碼[code] \[[^]]\{1,\}\][/code]
刪除僅由空字元組成的行
[code]sed '/^[[:space:]]*$/d' filename[/code]
匹配html標籤
[code]/\(<[^>]*>\)/[/code]例如:從html檔案中剔除html標籤
[code]sed 's/\(<[^>]*>\)//g;/^[[:space:]]*$/d' file.html[/code]
例如:要從下列程式碼中去除"[]"及其中包括的程式碼
[code][b][color=red]一. 替換[/color][/b]
sed 's/\[[^]]\{1,\}\]//g' filename[/code]
[b]匹配日期:[/b]
[code]Month, Day, Year [A-Z][a-z]\{3,9\}, [0-9]\{1,2\}, [0-9]\{4\}
2003-01-28 或 2003.10.18 或 2003/10/10 或 2003 10 10
\([0-9]\{4\}[ /-.][0-2][0-9][ /-.][0-3][0-9]\)[/code]
[b]匹配IP地址[/b]
[code]\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)
\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)[/code]
[b]匹配數字串[/b]
[code][-+]*[0-9]\{1,\} 整數
[-+]*[0-9]\{1,\}\.[0-9]\{1,\} 浮點數[/code]
[b]從字串中解析出兩個子串(前2各字元和後9個字元) [/b]
[code]echo "WeLoveChinaUnix"|sed -e 'H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n/ /'
We ChinaUnix [/code]
[b]分解日期串[/b]
[code]echo 20030922|sed 's/\(....\)\(..\)\(..\)/\1 \2 \3/'|read year month day
echo $year $month $day [/code]
[b]檔案內容倒序輸出[/b]
[code]sed '1!G;h;$!d' oldfile >newfile[/code]
[code]匹配中文字元的正規表示式:
[\u4e00-\u9fa5]
匹配雙位元組字元(包括漢字在內):
[^\x00-\xff]
匹配空行的正規表示式:
\n[\s| ]*\r
匹配HTML標記的正規表示式:
/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正規表示式:
(^\s*)|(\s*$)
URL:
[url]http://([/url][\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
Email:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
中華人民共和國電話號碼
(\(\d{3}\)|\d{3}-)?\d{8}
中華人民共和國郵編
\d{6}
門丁註冊的id格式:2-12位,數字、字元、下劃線(0-9,a-z,A-Z,_)
^[0-9a-zA-Z]+(\w){1,11}[/code]
[color=red]藍吧甜 寶寶:[/color][color=blue]主人,陪我去森林裡玩好不好?
你和寶寶在森林裡找了個好東西給你~~管理員作的特別科研卡!
卡片說明:獲得社群特別科研基金100個金幣。
卡片效果:得到100金幣。
你高興我也高興![/color]
[img]http://www.xmsq.com/web/images/card/23.jpg[/img]
[code]匹配中文字元的正規表示式: [\u4e00-\u9fa5]
匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
匹配空行的正規表示式:\n[\s| ]*\r
匹配HTML標記的正規表示式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正規表示式:(^\s*)|(\s*$)(像vbscript那樣的trim函式)
匹配Email地址的正規表示式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正規表示式:[url]http://([/url][\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
---------------------------------------------------------------------------
以下是例子:
利用正規表示式限制網頁表單裡的文字框輸入內容:
用正規表示式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
1.用正規表示式限制只能輸入全形字元: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正規表示式限制只能輸入數字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正規表示式限制只能輸入數字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
4.計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
5.javascript中沒有像vbscript那樣的trim函式,我們就可以利用這個表示式來實現,如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正規表示式分解和轉換IP地址:
6.下面是利用正規表示式匹配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("不是一個正確的IP地址!")
}
}
不過上面的程式如果不用正規表示式,而直接用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))[/code]
經典正規表示式(ZT) by lemon
關鍵詞: 正規表示式 by lemon posted at oioj on 2005-12-17 17:32:01 Weather: 晴 正規表示式用於字串處理,表單驗證等場合,實用高效,但用到時總是不太把握,以致往往要上網查一番。我將一些常用的表示式收藏在這裡,作備忘之用。本貼隨時會更新。匹配中文字元的正規表示式: [\u4e00-\u9fa5]匹配雙位元組字元(包括漢字在內):[^\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程式,如下結果為page1s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)利用正規表示式限制網頁表單裡的文字框輸入內容:用正規表示式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"用正規表示式限制只能輸入全形字元: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"用正規表示式限制只能輸入數字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"用正規表示式限制只能輸入數字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
正規表示式,相關連結
http://blog.csdn.net/laily/category/19548.aspx
http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微軟的正規表示式教程(五):選擇/編組和後向引用 http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微軟的正規表示式教程(四):限定符和定位符 http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx 微軟的正規表示式教程(三):字元匹配 http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx 微軟的正規表示式教程(二):正規表示式語法和優先權順序 http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx 微軟的正規表示式教程(一):正規表示式簡介 http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx 小程式大作為:高階查詢/替換、正規表示式練習器、Javascript指令碼程式偵錯程式 http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx 經典正規表示式 正規表示式,正規表示式,正規表示式匹配,正規表示式語法,模式匹配,正規表示式匹配 javascript正規表示式 ASP正規表示式 ASP.NET正規表示式 C#正規表示式 JSP正規表示式 PHP正規表示式 VB.NET正規表示式 VBSCript正規表示式程式設計 delphi正規表示式 jscript
補充:
^\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 利用正規表示式去除字串中重複的字元的演算法程式: 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
===============================
如果var s = "abacabefggeeii"
結果就不對了,結果為:abeicfgg
正規表示式的能力有限 1.確認有效電子郵件格式
下面的程式碼示例使用靜態 Regex.IsMatch 方法驗證一個字串是否為有效電子郵件格式。如果字串包含一個有效的電子郵件地址,則 IsValidEmail 方法返回 true,否則返回 false,但不採取其他任何操作。您可以使用 IsValidEmail,在應用程式將地址儲存在資料庫中或顯示在 ASP.NET 頁中之前,篩選出包含無效字元的電子郵件地址。 [Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
2.清理輸入字串
下面的程式碼示例使用靜態 Regex.Replace 方法從字串中抽出無效字元。您可以使用這裡定義的 CleanInput 方法,清除掉在接受使用者輸入的窗體的文字欄位中輸入的可能有害的字元。CleanInput 在清除掉除 @、-(連字元)和 .(句點)以外的所有非字母數字字元後返回一個字串。 [Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^\w\.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}
3.更改日期格式
以下程式碼示例使用 Regex.Replace 方法來用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。 [Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?\d{1,2})/(?\d{1,2})/(?\d{2,4})\b", _
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b",
"${day}-${month}-${year}");
}
Regex 替換模式
本示例說明如何在 Regex.Replace 的替換模式中使用命名的反向引用。其中,替換表示式 ${day} 插入由 (?...) 組捕獲的子字串。 有幾種靜態函式使您可以在使用正規表示式操作時無需建立顯式正規表示式物件,而 Regex.Replace 函式正是其中之一。如果您不想保留編譯的正規表示式,這將給您帶來方便
4.提取 URL 資訊
以下程式碼示例使用 Match.Result 來從 URL 提取協議和埠號。例如,“http://www.contoso.com:8080/letters/readme.html”將返回“http:8080”。 [Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?\w+)://[^/]+?(?:\d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}
by lemon posted on 2005-12-17 17:32:51
常用的匹配正規表示式和例項: http://www.blueidea.com/tech/program/2004/2273.asp
正規表示式使用詳解[轉]
關鍵詞: 正規表示式 作者:呂曉波
如果我們問那些UNIX系統的愛好者他們最喜歡什麼,答案除了穩定的系統和可以遠端啟動之外,十有八九的人會提到正規表示式;如果我們再問他們最頭痛的是什麼,可能除了複雜的程序控制和安裝過程之外,還會是正規表示式。那麼正規表示式到底是什麼?如何才能真正的掌握正規表示式並正確的加以靈活運用?本文將就此展開介紹,希望能夠對那些渴望瞭解和掌握正規表示式的讀者有所助益。
入門簡介
簡單的說,正規表示式是一種可以用於模式匹配和替換的強有力的工具。我們可以在幾乎所有的基於UNIX系統的工具中找到正規表示式的身影,例如,vi編輯器,Perl或PHP指令碼語言,以及awk或sed shell程式等。此外,象JavaScript這種客戶端的指令碼語言也提供了對正規表示式的支援。由此可見,正規表示式已經超出了某種語言或某個系統的侷限,成為人們廣為接受的概念和功能。
正規表示式可以讓使用者透過使用一系列的特殊字元構建匹配模式,然後把匹配模式與資料檔案、程式輸入以及WEB頁面的表單輸入等目標物件進行比較,根據比較物件中是否包含匹配模式,執行相應的程式。
舉例來說,正規表示式的一個最為普遍的應用就是用於驗證使用者線上輸入的郵件地址的格式是否正確。如果透過正規表示式驗證使用者郵件地址的格式正確,使用者所填寫的表單資訊將會被正常處理;反之,如果使用者輸入的郵件地址與正則表達的模式不匹配,將會彈出提示資訊,要求使用者重新輸入正確的郵件地址。由此可見正規表示式在WEB應用的邏輯判斷中具有舉足輕重的作用。
基本語法
在對正規表示式的功能和作用有了初步的瞭解之後,我們就來具體看一下正規表示式的語法格式。
正規表示式的形式一般如下:
/love/
其中位於“/”定界符之間的部分就是將要在目標物件中進行匹配的模式。使用者只要把希望查詢匹配物件的模式內容放入“/”定界符之間即可。為了能夠使使用者更加靈活的定製模式內容,正規表示式提供了專門的“元字元”。所謂元字元就是指那些在正規表示式中具有特殊意義的專用字元,可以用來規定其前導字元(即位於元字元前面的字元)在目標物件中的出現模式。
較為常用的元字元包括: “+”, “*”,以及 “?”。其中,“+”元字元規定其前導字元必須在目標物件中連續出現一次或多次,“*”元字元規定其前導字元必須在目標物件中出現零次或連續多次,而“?”元字元規定其前導物件必須在目標物件中連續出現零次或一次。
下面,就讓我們來看一下正規表示式元字元的具體應用。
/fo+/
因為上述正規表示式中包含“+”元字元,表示可以與目標物件中的 “fool”, “fo”, 或者 “football”等在字母f後面連續出現一個或多個字母o的字串相匹配。
/eg*/
因為上述正規表示式中包含“*”元字元,表示可以與目標物件中的 “easy”, “ego”, 或者 “egg”等在字母e後面連續出現零個或多個字母g的字串相匹配。
/Wil?/
因為上述正規表示式中包含“?”元字元,表示可以與目標物件中的 “Win”, 或者 “Wilson”,等在字母i後面連續出現零個或一個字母l的字串相匹配。
除了元字元之外,使用者還可以精確指定模式在匹配物件中出現的頻率。例如,
/jim{2,6}/
上述正規表示式規定字元m可以在匹配物件中連續出現2-6次,因此,上述正規表示式可以同jimmy或jimmmmmy等字串相匹配。
在對如何使用正規表示式有了初步瞭解之後,我們來看一下其它幾個重要的元字元的使用方式。
\s:用於匹配單個空格符,包括tab鍵和換行符;
\S:用於匹配除單個空格符之外的所有字元;
\d:用於匹配從0到9的數字;
\w:用於匹配字母,數字或下劃線字元;
\W:用於匹配所有與\w不匹配的字元;
. :用於匹配除換行符之外的所有字元。
(說明:我們可以把\s和\S以及\w和\W看作互為逆運算)
下面,我們就透過例項看一下如何在正規表示式中使用上述元字元。
/\s+/
上述正規表示式可以用於匹配目標物件中的一個或多個空格字元。
/\d000/
如果我們手中有一份複雜的財務報表,那麼我們可以透過上述正規表示式輕而易舉的查詢到所有總額達千元的款項。
除了我們以上所介紹的元字元之外,正規表示式中還具有另外一種較為獨特的專用字元,即定位符。定位符用於規定匹配模式在目標物件中的出現位置。
較為常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符規定匹配模式必須出現在目標字串的開頭,“$”定位符規定匹配模式必須出現在目標物件的結尾,\b定位符規定匹配模式必須出現在目標字串的開頭或結尾的兩個邊界之一,而“\B”定位符則規定匹配物件必須位於目標字串的開頭和結尾兩個邊界之內,即匹配物件既不能作為目標字串的開頭,也不能作為目標字串的結尾。同樣,我們也可以把“^”和“$”以及“\b”和“\B”看作是互為逆運算的兩組定位符。舉例來說:
/^hell/
因為上述正規表示式中包含“^”定位符,所以可以與目標物件中以 “hell”, “hello”或 “hellhound”開頭的字串相匹配。
/ar$/
因為上述正規表示式中包含“$”定位符,所以可以與目標物件中以 “car”, “bar”或 “ar” 結尾的字串相匹配。
/\bbom/
因為上述正規表示式模式以“\b”定位符開頭,所以可以與目標物件中以 “bomb”, 或 “bom”開頭的字串相匹配。
/man\b/
因為上述正規表示式模式以“\b”定位符結尾,所以可以與目標物件中以 “human”, “woman”或 “man”結尾的字串相匹配。
為了能夠方便使用者更加靈活的設定匹配模式,正規表示式允許使用者在匹配模式中指定某一個範圍而不侷限於具體的字元。例如:
/[A-Z]/
上述正規表示式將會與從A到Z範圍內任何一個大寫字母相匹配。
/[a-z]/
上述正規表示式將會與從a到z範圍內任何一個小寫字母相匹配。
/[0-9]/
上述正規表示式將會與從0到9範圍內任何一個數字相匹配。
/([a-z][A-Z][0-9])+/
上述正規表示式將會與任何由字母和數字組成的字串,如 “aB0” 等相匹配。這裡需要提醒使用者注意的一點就是可以在正規表示式中使用 “()” 把字串組合在一起。“()”符號包含的內容必須同時出現在目標物件中。因此,上述正規表示式將無法與諸如 “abc”等的字串匹配,因為“abc”中的最後一個字元為字母而非數字。
如果我們希望在正規表示式中實現類似程式設計邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符 “|”。例如:
/to|too|2/
上述正規表示式將會與目標物件中的 “to”, “too”, 或 “2” 相匹配。
正規表示式中還有一個較為常用的運算子,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規定目標物件中不能存在模式中所規定的字串。例如:
/[^A-C]/
上述字串將會與目標物件中除A,B,和C之外的任何字元相匹配。一般來說,當“^”出現在 “[]”內時就被視做否定運算子;而當“^”位於“[]”之外,或沒有“[]”時,則應當被視做定位符。
最後,當使用者需要在正規表示式的模式中加入元字元,並查詢其匹配物件時,可以使用轉義符“\”。例如:
/Th\*/
上述正規表示式將會與目標物件中的“Th*”而非“The”等相匹配。
使用例項
在對正規表示式有了較為全面的瞭解之後,我們就來看一下如何在Perl,PHP,以及JavaScript中使用正規表示式。
通常,Perl中正規表示式的使用格式如下:
operator / regular-expression / string-to-replace / modifiers
運算子一項可以是m或s,分別代表匹配運算和替換運算。
其中,正規表示式一項是將要進行匹配或替換操作的模式,可以由任意字元,元字元,或定位符等組成。替換字串一項是使用s運算子時,對查詢到的模式匹配物件進行替換的字串。最後的引數項用來控制不同的匹配或替換方式。例如:
s/geed/good/
將會在目標物件中查詢第一個出現的geed字串,並將其替換為good。如果我們希望在目標物件的全域性範圍內執行多次查詢—替換操作的話,可以使用引數 “g”,即s/love/lust/g。
此外,如果我們不需要限制匹配的大小寫形式的話,可以使用引數 “i ”。例如,
m/JewEL/i
上述正規表示式將會與目標物件中的jewel,Jewel,或JEWEL相匹配。
在Perl中,使用專門的運算子“=~”指定正規表示式的匹配物件。例如:
$flag =~ s/abc/ABC/
上述正規表示式將會把變數$flag中的字串abc替換為ABC。
下面,我們就在Perl程式中加入正規表示式,驗證使用者郵件地址格式的有效性。程式碼如下:
#!/usr/bin/perl
# get input
print “What\'s your email address?\n”;
$email =
chomp($email);
# match and display result
if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/)
{
print(“Your email address is correct!\n”);
}
else
{
print(“Please try again!\n”);
}
如果使用者更偏愛PHP的話,可以使用ereg()函式進行模式匹配操作。ereg()函式的使用格式如下:
ereg(pattern, string)
其中,pattern代表正規表示式的模式,而string則是執行查詢替換操作的目標物件。同樣是驗證郵件地址,使用PHP編寫的程式程式碼如下:
if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email))
{ echo “Your email address is correct!”;}
else
{ echo “Please try again!”;}
?>
最後,我們在來看一下JavaScript。JavaScript 1.2中帶有一個功能強大的RegExp()物件,可以用來進行正規表示式的匹配操作。其中的test()方法可以檢驗目標物件中是否包含匹配模式,並相應的返回true或false。
我們可以使用JavaScript編寫以