js正規表示式例項(整理)
匹配結尾的數字
來源:如何用JAVASCRIPT 正規表示式取出字串最後一組數字,謝謝
如
30CAC0040 取出40
3SFASDF92 取出92
正則如下://d+$/g
統一空格個數
來源:正則匹配空格的問題
字串內字元鍵有空格,但是空格的數量可能不一致,通過正則將空格的個數統一變為一個。
例如:藍色理想
變成:藍色理想
aobert的正則:
<script>
var str="藍色理想"
var reg=//s+/g
str = str.replace(reg," ")
document.write(str)
</script>
判斷字串是不是由數字組成
來源:有沒有簡單的方法判斷字串由數字組成?
這個正則比較簡單,寫了一個測試
<script type="text/javascript">
function isDigit(str){
var reg = /^/d*$/;
return reg.test(str);
}
var str = "7654321";
document.write(isDigit(str));
var str = "test";
document.write(isDigit(str));
</script>
電話號碼正則
來源:想問一下關於電話號碼的正則判斷
:求一個驗證電話號碼的JS正則
/^/d{3,4}-/d{7,8}(-/d{3,4})?$/
區號必填為3-4位的數字,區號之後用“-”與電話號碼連線
^/d{3,4}-
電話號碼為7-8位的數字
/d{7,8}
分機號碼為3-4位的數字,非必填,但若填寫則以“-”與電話號碼相連線
(-/d{3,4})?
手機號碼正規表示式
正則驗證手機號,忽略前面的0,支援130-139,150-159。忽略前面0之後判斷它是11位的。
cloeft的正則:
/^0*(13|15)/d{9}$/
^0*匹配掉開頭任意數量的0。
由於手機號碼是13任意數字9位,和15任意數字9位,所以可以用(13|15)/d{9}匹配。
測試程式碼如下:
function testReg(reg,str){
return reg.test(str);
}
var reg = /^0*(13|15)/d{9}$/;
var str = '13889294444';
var str2 = '12889293333';
var str3 = '23445567';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
使用正規表示式實現刪除字串中的空格:
來源:請問JS中有沒有去掉空格的函式
程式碼以及測試程式碼如下:
<script type="text/javascript">
//刪除字串兩側的空白字元。
function trim(str){
return str.replace(/^/s+|/s+$/g,'');
}
//刪除字串左側的空白字元。
function ltrim(str){
return str.replace(/^/s+/g,'');
}
//刪除字串右側的空白字元。
function rtrim(str){
return str.replace(//s+$/g,'');
}
//以下為測試程式碼
var trimTest = " 123456789 ";//前後各有一個空格。
document.write('length:'+trimTest.length+'<br />');//使用前
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');//使用ltrim後
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');//使用rtrim後
document.write('trim length:'+trim(trimTest).length+'<br />');//使用trim後
</script>
測試的結果如下:
length:11
ltrim length:10
rtrim length:10
trim length:9
限制文字框只能輸入數字和小數點等等
來源:文字框輸入限制的問題????
只能輸入數字和小數點
var reg = /^/d*/.?/d{0,2}$/
開頭有若干個數字,中間有0個或者一個小數點,結尾有0到2個數字。
只能輸入小寫的英文字母和小數點,和冒號,正反斜槓(:.//)
var reg = /[a-z/.////:]+/;
a-z包括了小寫的英文字母,/.是小數點,//和//分別是左右反斜線,最後是冒號。整個組成一個字元
集和程式碼任一均可,最後在加上+,1或者多個。
替換小數點前內容為指定內容
來源:求一正規表示式!
請問怎麼把這個字串的小數點前面的字元替換為我自定義的字串啊?
例如:infomarket.php?id=197 替換為test.php?id=197
應該可以把第一個點“.”之前的所有單詞字元替換為test就可以了。我寫的正則如下:
<script type="text/javascript">
var str = "infomarket.php?id=197";
var reg = /^/w*/ig;
//匹配字串開頭的任意個單詞字元
str = str.replace(reg,'test');
document.write(str);
</script>
原帖的有點複雜,沒太看明白。
只匹配中文的正規表示式
來源:關於上傳的時候,只能選擇中文名稱的圖片(是否可以用TOASCII方法呢?)
前兩天看的《JavaScript開發王》裡恰好有中文的unicode範圍,正則如下:
/[/u4E00-/u9FA5/uf900-/ufa2d]/
寫了一個簡單的測試,會把所有的中文替換成“哦”。
<script type="text/javascript">
var str = "有中文?and English.";
var reg = /[/u4E00-/u9FA5/uf900-/ufa2d]/ig;
str = str.replace(reg,'哦');
document.write(str);
</script>
返回字串的中文字元個數
來源:有沒返回中文字元位元組的函式!
一般的字元長度對中文和英文都是不分別的如JS裡的length,那麼如何返回字串中中文字元的個數
呢?guoshuang老師在原帖中給出瞭解決方案,我又沒看懂……
不過我自己也想到了一個辦法:先去掉非中文字元,再返回length屬性。函式以及測試程式碼如下:
<script type="text/javascript">
function cLength(str){
var reg = /[^/u4E00-/u9FA5/uf900-/ufa2d]/g;
//匹配非中文的正規表示式
var temp = str.replace(reg,'');
return temp.length;
}
var str = "中文123";
document.write(str.length+'<br />');
document.write(cLength(str));
</script>
結果:
52
中文兩個,數字三個,正確。
下面的測試也正確。
var str = "中文123tets@#!#%$#[][{}";
document.write(str.length+'<br />');
document.write(cLength(str));
正規表示式取得匹配IP地址前三段
來源:如何用正則取IP前3段
192.168.118.101,192.168.118.72, 192.168.118.1都替換成:192.168.118
只要匹配掉最後一段並且替換為空字串就行了,正則如下:
//./d{1,3}$/
匹配結尾的.n,.nn或者.nnn。
測試程式碼如下:
function replaceReg(reg,str){
return str.replace(reg,'')
}
var reg = //./d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
相似的有,這個帖子裡有一個驗證IP地址的方法:求檢驗MAC地址的正則表達例子
匹配<ul>與<ul>之間的內容
來源:請教個正則的小問題吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正則可以得到<ul>起到下個<ul> 之間的內容。
正則如下:
/<ul>[/s/S]+?<ul>/i
首先匹配兩側的ul標籤,中間的[/s/S]+?可以匹配一個或者多個任意字元,一定要非貪婪,否則會匹
配<ul>safsf<ul>safsf</ul><ul>。
用正規表示式獲得檔名
來源:C:/006.JPG
c:/images/tupian/006.jpg
可能是直接在碟符根目錄下,也可能在好幾層目錄下,要求替換到只剩檔名。
xlez的正則如下:
/[^////]*[////]+/g
首先匹配非左右斜線字元0或多個,然後是左右斜線一個或者多個。形如“xxx/”或者“xxx/”或者“/”或
者“/”
函式以及測試程式碼:
<script type="text/javascript">
function getFileName(str){
var reg = /[^////]*[////]+/g;
//xxx/或者是xxx/
str = str.replace(reg,'');
return str;
}
var str = "c://images//tupian//006.jpg";
document.write(getFileName(str)+'<br />');
var str2 = "c:/images/tupian/test2.jpg";
document.write(getFileName(str2));
</script>
注意,/需要轉義。
絕對路徑變相對路徑
來源:討論一個正則
將<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">轉換
為:<IMG height="120" width="800" src="/image/somepic.gif">。
其中網址可能改變,例如http://localhost等等。
cloudchen的正則:
/http:////[^//]+/
首先是http://,然後[^//]+找過1個或者多個非/字元,因為遇到第一個/表示已經到目錄了,停止匹
配。
測試程式碼如下:
<script type="text/javascript">
var str = '<IMG height="120" width="800" src="http://23.123.22.12/image/
somepic.gif">';
var reg = /http:////[^//]+/;
str = str.replace(reg,"");
alert(str)
</script>
使用者名稱正則
來源:求正則,急急呀!!
用於使用者名稱註冊,,使用者名稱只能用中文、英文、數字、下劃線、4-16個字元。
hansir和解決方案弄成正則:
/^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/
中文字元或者單詞字元,4到16個。實現4到16結成到正則裡的關鍵就是開始^和結束$,這就等於整
個字串只能有這些匹配的內容,不能有多餘的。
函式和測試程式碼如下:
<script type="text/javascript">
function isEmail(str){
var reg = /^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/;
return reg.test(str);
}
var str = '超級無敵使用者名稱regExp';
var str2 = '搗亂的@';
var str3 = '太短'
var str4 = '太長longlonglonglonglonglonglonglong'
document.write(isEmail(str)+'<br />');
document.write(isEmail(str2)+'<br />');
document.write(isEmail(str3)+'<br />');
document.write(isEmail(str4)+'<br />');
</script>
匹配英文地址
來源:-求助- 正則問題
規則如下:
包含"點", "字母","空格","逗號","數字",但開頭和結尾不能是除字母外任何字元。
[/.a-zA-Z/s,0-9]這個字符集就實現了字母,空格,逗號和數字。最終正則如下:
/^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/
開頭必須有字母,結束也必須是一個以上字母。測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/;
var str = 'No.8,ChangAn Street,BeiJing,China';
var str2 = '8.No,ChangAn Street,BeiJing,China';
var str3 = 'No.8,ChangAn Street,BeiJing,China88';
document.write(testReg(reg,str)+'<br />')
document.write(testReg(reg,str2)+'<br />')
document.write(testReg(reg,str3)+'<br />')
</script>
正則匹配價格
來源:為什麼這個正則不起作用啊?急啊?
價格的格式應該如下:
開頭數字若干位,可能有一個小數點,小數點後面可以有兩位數字。hansir給出的對應正則如下:
/^(/d*/./d{0,2}|/d+).*$/
hansir給出的測試程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" c />
<title>無標題文件</title>
<script type="text/javascript">
function checkPrice(me){
if(!(/^(?:/d+|/d+/./d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(/d*/./d{0,2}|/d+).*$/,'$1');
}
}
</script>
</head>
<body>
<input type="text" />
</body>
</html>
身份證號碼的匹配
來源:關於正則的,大家幫幫忙,急,線上等
身份證號碼可以是15位或者是18位,其中最後一位可以是X。其它全是數字,正則如下:
/^(/d{14}|/d{17})(/d|[xX])$/
開頭是14位或者17位數字,結尾可以是數字或者是x或者是X。
測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^(/d{14}|/d{17})(/d|[xX])$/;
var str = '123456789012345';//15位
var str2 = '123456789012345678';//18位
var str3 = '12345678901234567X';//最後一位是X
var str4 = '1234';//位數不對
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
要求文字有指定行數
來源:[求助]求一句正規表示式的寫法
匹配至少兩行的字串,每行都為非空字元。
只要匹配到[/n/r]就表示有換行了,再保證換行的兩段都不是空字元就可以了。正則如下:
//S+?[/n/r]/S+?/i
這個正則的應用應該是用在textarea裡,如果是如下要求:可以支援所有字元,中間可帶空格,可以
包括英文、數字、中文、標點
這樣的話,只要針對空格再改一下就行了。(按照非空的要求,上面有不能匹配“字元+空格+換行+字
符”的字串)。修改如下:
//S+?/s*?[/n/r]/s*?/S+?/i
單詞首字母大寫
來源:求個正則,處理英文單詞或片語的
每單詞首字大寫,其他小寫。如blue idea轉換為Blue Idea,BLUE IDEA也轉換為Blue Idea
cloeft的正則:
//b(/w)|/s(/w)/g
所謂“首字母”包括兩種情況:第一種是邊界(開頭)的單詞字元,一種是空格之後的新單詞的第一個字
母。測試程式碼如下:
<script type="text/javascript">
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
}
var reg = //b(/w)|/s(/w)/g;
var str = 'blue idea';
var str2 = 'BLUE IDEA';
var str3 = 'Test /n str is no good!';
var str4 = 'final test';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
document.write(replaceReg(reg,str4)+'<br />');
</script>
正則驗證日期格式
來源:YYYY-MM-DD的正則怎樣寫啊?
yyyy-mm-dd格式
正則如下:
/^/d{4}-/d{1,2}-/d{1,2}$/
4位數字,橫線,1或者2位數字,再橫線,最後又是1或者2位數字。
測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^/d{4}-/d{1,2}-/d{1,2}$/;
var str = '2008-8-8';
var str2 = '2008-08-08';
var str3 = '08-08-2008';
var str4 = '2008 08 08';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
第二種格式:來源:求一正規表示式
yyyy-mm-dd
或
yyyy/mm/dd
用“或”簡單地修改一下就行了。
/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/
去掉檔案的字尾名
來源:求一個正則
www.abc.com/dc/fda.asp變為www.abc.com/dc/fda。
如果檔案字尾已知的話這個問題就非常簡單了,正則如下:
//.asp$/
匹配最後的.asp而已,測試程式碼如下:
<script type="text/javascript">
function delAspExtension(str){
var reg = //.asp$/;
return str.replace(reg,'');
}
var str = 'www.abc.com/dc/fda.asp';
document.write(delAspExtension(str)+'<br />');
</script>
如果檔名未知的話就用這個正則://./w+$/,測試程式碼如下:
<script type="text/javascript">
function delExtension(str){
var reg = //./w+$/;
return str.replace(reg,'');
}
var str = 'example.com/dc/fda.asp';
document.write(delExtension(str)+'<br />');
var str2 = 'test/regular/fda.do';
document.write(delExtension(str2)+'<br />');
var str3 = 'example.com/dc/fda.strange_extension';
document.write(delExtension(str3)+'<br />');
</script>
驗證郵箱的正規表示式
來源:找JAVASCRIPT寫的表單檢查程式碼!
fuchangxi的正則:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/
開始必須是一個或者多個單詞字元或者是-,加上@,然後又是一個或者多個單詞字元或者是-。然後是
點“.”和單詞字元和-的組合,可以有一個或者多個組合。
<script type="text/javascript">
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = 'test@hotmail.com';
document.write(isEmail(str)+'<br />');
var str2 = 'test@sima.vip.com';
document.write(isEmail(str2)+'<br />');
var str3 = 'te-st@qq.com.cn';
document.write(isEmail(str3)+'<br />');
var str4 = 'te_st@sima.vip.com';
document.write(isEmail(str4)+'<br />');
var str5 = 'te.._st@sima.vip.com';
document.write(isEmail(str5)+'<br />');
</script>
我不太瞭解郵箱的具體規則。感覺這個正則比較簡單,EMAIL校驗正則討論求解裡有比較詳細的郵
箱正則討論。
匹配原始碼中的連結
來源:正則
能夠匹配HTML程式碼中連結的正則。
原帖正則:/<a href=".+?">.+?<//a>/g
感覺有點嚴格,首先要<a href=".+?">有,而且href屬性可以是一個或者多個除換行外任意字元(非
貪婪)。後面是.+?<//a>,一個或者多個除換行外任意字元(非貪婪),再加上結束標籤。
有個問題,如果a的起始標籤最後有空格,或者除了href還有其它屬性的話,上面的正則就不能匹配這
個連結了。
例如:
<a href="asdfs" >……多了個空格。
<a id="xx" href="asdfs">……前面有屬性。
……
重寫正則:/<a/s(/s*/w*?=".+?")*(/s*href=".+?")(/s*/w*?=".+?")*/s*>[/s/S]*?<//a>/
思路如下:首先要有<a和一個空格。/<a/s/
第一個(/s*/w*?=".+?")*
可以匹配一個屬性,屬性前面可能有或者沒有多餘的空格,用/s*匹配;屬性名肯定是單詞字元,
用/w*?匹配;=".+?"就是匹配屬性值了非換行字元若干個;整個括號外面加個*表示可能有任意多個
屬性。
(/s*href=".+?")
匹配href,它也是一個屬性,所以只要把上面子正規表示式中的/w修改為href=就行了。
(/s*/w*?=".+?")*重複第一個子正規表示式,再次接受任意個屬性。
/s*>,屬性最後再加上若干個空格和>。
[/s/S]*?,連結的文字,可能有任何字元組成,若干個,非貪婪。
<//a>最後是結束標籤。
補充:屬性名和=之間,以及=和屬性值之間也可能有空格。所以要再加上幾個/s*。
最後的例項程式碼如下:
<script type="text/javascript">
function findLinks(str){
var reg =
/<a/s(/s*/w*?/s*=/s*".+?")*(/s*href/s*=/s*".+?")(/s*/w*?/s*=/s*".+?")
*/s*>[/s/S]*?<//a>/g;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++){
//alert(arr);
document.write('link:'+arr+'<br />');
}
}
var str = '<p>測試連結:<a id = "test" href="http://bbs.blueidea.com" title="無敵">經典
論壇
</a></p><a href = "http://www.blueidea.com/" >藍色理想</a>';
var arr = findLinks(str);
</script>
會把所有的連結在頁面直接顯示出來。注意,
本帖遺留問題:如何執行從右到左的匹配。貌似JS 或者VBS 沒有提供這個功能2、JS 或
者VBS 不支援後行斷言。。用什麼方法實現這個功能
來源:如何用JAVASCRIPT 正規表示式取出字串最後一組數字,謝謝
如
30CAC0040 取出40
3SFASDF92 取出92
正則如下://d+$/g
統一空格個數
來源:正則匹配空格的問題
字串內字元鍵有空格,但是空格的數量可能不一致,通過正則將空格的個數統一變為一個。
例如:藍色理想
變成:藍色理想
aobert的正則:
<script>
var str="藍色理想"
var reg=//s+/g
str = str.replace(reg," ")
document.write(str)
</script>
判斷字串是不是由數字組成
來源:有沒有簡單的方法判斷字串由數字組成?
這個正則比較簡單,寫了一個測試
<script type="text/javascript">
function isDigit(str){
var reg = /^/d*$/;
return reg.test(str);
}
var str = "7654321";
document.write(isDigit(str));
var str = "test";
document.write(isDigit(str));
</script>
電話號碼正則
來源:想問一下關於電話號碼的正則判斷
:求一個驗證電話號碼的JS正則
/^/d{3,4}-/d{7,8}(-/d{3,4})?$/
區號必填為3-4位的數字,區號之後用“-”與電話號碼連線
^/d{3,4}-
電話號碼為7-8位的數字
/d{7,8}
分機號碼為3-4位的數字,非必填,但若填寫則以“-”與電話號碼相連線
(-/d{3,4})?
手機號碼正規表示式
正則驗證手機號,忽略前面的0,支援130-139,150-159。忽略前面0之後判斷它是11位的。
cloeft的正則:
/^0*(13|15)/d{9}$/
^0*匹配掉開頭任意數量的0。
由於手機號碼是13任意數字9位,和15任意數字9位,所以可以用(13|15)/d{9}匹配。
測試程式碼如下:
function testReg(reg,str){
return reg.test(str);
}
var reg = /^0*(13|15)/d{9}$/;
var str = '13889294444';
var str2 = '12889293333';
var str3 = '23445567';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
使用正規表示式實現刪除字串中的空格:
來源:請問JS中有沒有去掉空格的函式
程式碼以及測試程式碼如下:
<script type="text/javascript">
//刪除字串兩側的空白字元。
function trim(str){
return str.replace(/^/s+|/s+$/g,'');
}
//刪除字串左側的空白字元。
function ltrim(str){
return str.replace(/^/s+/g,'');
}
//刪除字串右側的空白字元。
function rtrim(str){
return str.replace(//s+$/g,'');
}
//以下為測試程式碼
var trimTest = " 123456789 ";//前後各有一個空格。
document.write('length:'+trimTest.length+'<br />');//使用前
document.write('ltrim length:'+ltrim(trimTest).length+'<br />');//使用ltrim後
document.write('rtrim length:'+rtrim(trimTest).length+'<br />');//使用rtrim後
document.write('trim length:'+trim(trimTest).length+'<br />');//使用trim後
</script>
測試的結果如下:
length:11
ltrim length:10
rtrim length:10
trim length:9
限制文字框只能輸入數字和小數點等等
來源:文字框輸入限制的問題????
只能輸入數字和小數點
var reg = /^/d*/.?/d{0,2}$/
開頭有若干個數字,中間有0個或者一個小數點,結尾有0到2個數字。
只能輸入小寫的英文字母和小數點,和冒號,正反斜槓(:.//)
var reg = /[a-z/.////:]+/;
a-z包括了小寫的英文字母,/.是小數點,//和//分別是左右反斜線,最後是冒號。整個組成一個字元
集和程式碼任一均可,最後在加上+,1或者多個。
替換小數點前內容為指定內容
來源:求一正規表示式!
請問怎麼把這個字串的小數點前面的字元替換為我自定義的字串啊?
例如:infomarket.php?id=197 替換為test.php?id=197
應該可以把第一個點“.”之前的所有單詞字元替換為test就可以了。我寫的正則如下:
<script type="text/javascript">
var str = "infomarket.php?id=197";
var reg = /^/w*/ig;
//匹配字串開頭的任意個單詞字元
str = str.replace(reg,'test');
document.write(str);
</script>
原帖的有點複雜,沒太看明白。
只匹配中文的正規表示式
來源:關於上傳的時候,只能選擇中文名稱的圖片(是否可以用TOASCII方法呢?)
前兩天看的《JavaScript開發王》裡恰好有中文的unicode範圍,正則如下:
/[/u4E00-/u9FA5/uf900-/ufa2d]/
寫了一個簡單的測試,會把所有的中文替換成“哦”。
<script type="text/javascript">
var str = "有中文?and English.";
var reg = /[/u4E00-/u9FA5/uf900-/ufa2d]/ig;
str = str.replace(reg,'哦');
document.write(str);
</script>
返回字串的中文字元個數
來源:有沒返回中文字元位元組的函式!
一般的字元長度對中文和英文都是不分別的如JS裡的length,那麼如何返回字串中中文字元的個數
呢?guoshuang老師在原帖中給出瞭解決方案,我又沒看懂……
不過我自己也想到了一個辦法:先去掉非中文字元,再返回length屬性。函式以及測試程式碼如下:
<script type="text/javascript">
function cLength(str){
var reg = /[^/u4E00-/u9FA5/uf900-/ufa2d]/g;
//匹配非中文的正規表示式
var temp = str.replace(reg,'');
return temp.length;
}
var str = "中文123";
document.write(str.length+'<br />');
document.write(cLength(str));
</script>
結果:
52
中文兩個,數字三個,正確。
下面的測試也正確。
var str = "中文123tets@#!#%$#[][{}";
document.write(str.length+'<br />');
document.write(cLength(str));
正規表示式取得匹配IP地址前三段
來源:如何用正則取IP前3段
192.168.118.101,192.168.118.72, 192.168.118.1都替換成:192.168.118
只要匹配掉最後一段並且替換為空字串就行了,正則如下:
//./d{1,3}$/
匹配結尾的.n,.nn或者.nnn。
測試程式碼如下:
function replaceReg(reg,str){
return str.replace(reg,'')
}
var reg = //./d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
相似的有,這個帖子裡有一個驗證IP地址的方法:求檢驗MAC地址的正則表達例子
匹配<ul>與<ul>之間的內容
來源:請教個正則的小問題吧
<ul>safsf<ul>safsf</ul><ul>safsf</ul></ul>
用正則可以得到<ul>起到下個<ul> 之間的內容。
正則如下:
/<ul>[/s/S]+?<ul>/i
首先匹配兩側的ul標籤,中間的[/s/S]+?可以匹配一個或者多個任意字元,一定要非貪婪,否則會匹
配<ul>safsf<ul>safsf</ul><ul>。
用正規表示式獲得檔名
來源:C:/006.JPG
c:/images/tupian/006.jpg
可能是直接在碟符根目錄下,也可能在好幾層目錄下,要求替換到只剩檔名。
xlez的正則如下:
/[^////]*[////]+/g
首先匹配非左右斜線字元0或多個,然後是左右斜線一個或者多個。形如“xxx/”或者“xxx/”或者“/”或
者“/”
函式以及測試程式碼:
<script type="text/javascript">
function getFileName(str){
var reg = /[^////]*[////]+/g;
//xxx/或者是xxx/
str = str.replace(reg,'');
return str;
}
var str = "c://images//tupian//006.jpg";
document.write(getFileName(str)+'<br />');
var str2 = "c:/images/tupian/test2.jpg";
document.write(getFileName(str2));
</script>
注意,/需要轉義。
絕對路徑變相對路徑
來源:討論一個正則
將<IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif">轉換
為:<IMG height="120" width="800" src="/image/somepic.gif">。
其中網址可能改變,例如http://localhost等等。
cloudchen的正則:
/http:////[^//]+/
首先是http://,然後[^//]+找過1個或者多個非/字元,因為遇到第一個/表示已經到目錄了,停止匹
配。
測試程式碼如下:
<script type="text/javascript">
var str = '<IMG height="120" width="800" src="http://23.123.22.12/image/
somepic.gif">';
var reg = /http:////[^//]+/;
str = str.replace(reg,"");
alert(str)
</script>
使用者名稱正則
來源:求正則,急急呀!!
用於使用者名稱註冊,,使用者名稱只能用中文、英文、數字、下劃線、4-16個字元。
hansir和解決方案弄成正則:
/^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/
中文字元或者單詞字元,4到16個。實現4到16結成到正則裡的關鍵就是開始^和結束$,這就等於整
個字串只能有這些匹配的內容,不能有多餘的。
函式和測試程式碼如下:
<script type="text/javascript">
function isEmail(str){
var reg = /^[/u4E00-/u9FA5/uf900-/ufa2d/w]{4,16}$/;
return reg.test(str);
}
var str = '超級無敵使用者名稱regExp';
var str2 = '搗亂的@';
var str3 = '太短'
var str4 = '太長longlonglonglonglonglonglonglong'
document.write(isEmail(str)+'<br />');
document.write(isEmail(str2)+'<br />');
document.write(isEmail(str3)+'<br />');
document.write(isEmail(str4)+'<br />');
</script>
匹配英文地址
來源:-求助- 正則問題
規則如下:
包含"點", "字母","空格","逗號","數字",但開頭和結尾不能是除字母外任何字元。
[/.a-zA-Z/s,0-9]這個字符集就實現了字母,空格,逗號和數字。最終正則如下:
/^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/
開頭必須有字母,結束也必須是一個以上字母。測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^[a-zA-Z][/.a-zA-Z/s,0-9]*?[a-zA-Z]+$/;
var str = 'No.8,ChangAn Street,BeiJing,China';
var str2 = '8.No,ChangAn Street,BeiJing,China';
var str3 = 'No.8,ChangAn Street,BeiJing,China88';
document.write(testReg(reg,str)+'<br />')
document.write(testReg(reg,str2)+'<br />')
document.write(testReg(reg,str3)+'<br />')
</script>
正則匹配價格
來源:為什麼這個正則不起作用啊?急啊?
價格的格式應該如下:
開頭數字若干位,可能有一個小數點,小數點後面可以有兩位數字。hansir給出的對應正則如下:
/^(/d*/./d{0,2}|/d+).*$/
hansir給出的測試程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" c />
<title>無標題文件</title>
<script type="text/javascript">
function checkPrice(me){
if(!(/^(?:/d+|/d+/./d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(/d*/./d{0,2}|/d+).*$/,'$1');
}
}
</script>
</head>
<body>
<input type="text" />
</body>
</html>
身份證號碼的匹配
來源:關於正則的,大家幫幫忙,急,線上等
身份證號碼可以是15位或者是18位,其中最後一位可以是X。其它全是數字,正則如下:
/^(/d{14}|/d{17})(/d|[xX])$/
開頭是14位或者17位數字,結尾可以是數字或者是x或者是X。
測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^(/d{14}|/d{17})(/d|[xX])$/;
var str = '123456789012345';//15位
var str2 = '123456789012345678';//18位
var str3 = '12345678901234567X';//最後一位是X
var str4 = '1234';//位數不對
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
要求文字有指定行數
來源:[求助]求一句正規表示式的寫法
匹配至少兩行的字串,每行都為非空字元。
只要匹配到[/n/r]就表示有換行了,再保證換行的兩段都不是空字元就可以了。正則如下:
//S+?[/n/r]/S+?/i
這個正則的應用應該是用在textarea裡,如果是如下要求:可以支援所有字元,中間可帶空格,可以
包括英文、數字、中文、標點
這樣的話,只要針對空格再改一下就行了。(按照非空的要求,上面有不能匹配“字元+空格+換行+字
符”的字串)。修改如下:
//S+?/s*?[/n/r]/s*?/S+?/i
單詞首字母大寫
來源:求個正則,處理英文單詞或片語的
每單詞首字大寫,其他小寫。如blue idea轉換為Blue Idea,BLUE IDEA也轉換為Blue Idea
cloeft的正則:
//b(/w)|/s(/w)/g
所謂“首字母”包括兩種情況:第一種是邊界(開頭)的單詞字元,一種是空格之後的新單詞的第一個字
母。測試程式碼如下:
<script type="text/javascript">
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
}
var reg = //b(/w)|/s(/w)/g;
var str = 'blue idea';
var str2 = 'BLUE IDEA';
var str3 = 'Test /n str is no good!';
var str4 = 'final test';
document.write(replaceReg(reg,str)+'<br />');
document.write(replaceReg(reg,str2)+'<br />');
document.write(replaceReg(reg,str3)+'<br />');
document.write(replaceReg(reg,str4)+'<br />');
</script>
正則驗證日期格式
來源:YYYY-MM-DD的正則怎樣寫啊?
yyyy-mm-dd格式
正則如下:
/^/d{4}-/d{1,2}-/d{1,2}$/
4位數字,橫線,1或者2位數字,再橫線,最後又是1或者2位數字。
測試程式碼如下:
<script type="text/javascript">
function testReg(reg,str){
return reg.test(str);
}
var reg = /^/d{4}-/d{1,2}-/d{1,2}$/;
var str = '2008-8-8';
var str2 = '2008-08-08';
var str3 = '08-08-2008';
var str4 = '2008 08 08';
document.write(testReg(reg,str)+'<br />');
document.write(testReg(reg,str2)+'<br />');
document.write(testReg(reg,str3)+'<br />');
document.write(testReg(reg,str4)+'<br />');
</script>
第二種格式:來源:求一正規表示式
yyyy-mm-dd
或
yyyy/mm/dd
用“或”簡單地修改一下就行了。
/^/d{4}(-|//)/d{1,2}(-|//)/d{1,2}$/
去掉檔案的字尾名
來源:求一個正則
www.abc.com/dc/fda.asp變為www.abc.com/dc/fda。
如果檔案字尾已知的話這個問題就非常簡單了,正則如下:
//.asp$/
匹配最後的.asp而已,測試程式碼如下:
<script type="text/javascript">
function delAspExtension(str){
var reg = //.asp$/;
return str.replace(reg,'');
}
var str = 'www.abc.com/dc/fda.asp';
document.write(delAspExtension(str)+'<br />');
</script>
如果檔名未知的話就用這個正則://./w+$/,測試程式碼如下:
<script type="text/javascript">
function delExtension(str){
var reg = //./w+$/;
return str.replace(reg,'');
}
var str = 'example.com/dc/fda.asp';
document.write(delExtension(str)+'<br />');
var str2 = 'test/regular/fda.do';
document.write(delExtension(str2)+'<br />');
var str3 = 'example.com/dc/fda.strange_extension';
document.write(delExtension(str3)+'<br />');
</script>
驗證郵箱的正規表示式
來源:找JAVASCRIPT寫的表單檢查程式碼!
fuchangxi的正則:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/
開始必須是一個或者多個單詞字元或者是-,加上@,然後又是一個或者多個單詞字元或者是-。然後是
點“.”和單詞字元和-的組合,可以有一個或者多個組合。
<script type="text/javascript">
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/;
return reg.test(str);
}
var str = 'test@hotmail.com';
document.write(isEmail(str)+'<br />');
var str2 = 'test@sima.vip.com';
document.write(isEmail(str2)+'<br />');
var str3 = 'te-st@qq.com.cn';
document.write(isEmail(str3)+'<br />');
var str4 = 'te_st@sima.vip.com';
document.write(isEmail(str4)+'<br />');
var str5 = 'te.._st@sima.vip.com';
document.write(isEmail(str5)+'<br />');
</script>
我不太瞭解郵箱的具體規則。感覺這個正則比較簡單,EMAIL校驗正則討論求解裡有比較詳細的郵
箱正則討論。
匹配原始碼中的連結
來源:正則
能夠匹配HTML程式碼中連結的正則。
原帖正則:/<a href=".+?">.+?<//a>/g
感覺有點嚴格,首先要<a href=".+?">有,而且href屬性可以是一個或者多個除換行外任意字元(非
貪婪)。後面是.+?<//a>,一個或者多個除換行外任意字元(非貪婪),再加上結束標籤。
有個問題,如果a的起始標籤最後有空格,或者除了href還有其它屬性的話,上面的正則就不能匹配這
個連結了。
例如:
<a href="asdfs" >……多了個空格。
<a id="xx" href="asdfs">……前面有屬性。
……
重寫正則:/<a/s(/s*/w*?=".+?")*(/s*href=".+?")(/s*/w*?=".+?")*/s*>[/s/S]*?<//a>/
思路如下:首先要有<a和一個空格。/<a/s/
第一個(/s*/w*?=".+?")*
可以匹配一個屬性,屬性前面可能有或者沒有多餘的空格,用/s*匹配;屬性名肯定是單詞字元,
用/w*?匹配;=".+?"就是匹配屬性值了非換行字元若干個;整個括號外面加個*表示可能有任意多個
屬性。
(/s*href=".+?")
匹配href,它也是一個屬性,所以只要把上面子正規表示式中的/w修改為href=就行了。
(/s*/w*?=".+?")*重複第一個子正規表示式,再次接受任意個屬性。
/s*>,屬性最後再加上若干個空格和>。
[/s/S]*?,連結的文字,可能有任何字元組成,若干個,非貪婪。
<//a>最後是結束標籤。
補充:屬性名和=之間,以及=和屬性值之間也可能有空格。所以要再加上幾個/s*。
最後的例項程式碼如下:
<script type="text/javascript">
function findLinks(str){
var reg =
/<a/s(/s*/w*?/s*=/s*".+?")*(/s*href/s*=/s*".+?")(/s*/w*?/s*=/s*".+?")
*/s*>[/s/S]*?<//a>/g;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++){
//alert(arr);
document.write('link:'+arr+'<br />');
}
}
var str = '<p>測試連結:<a id = "test" href="http://bbs.blueidea.com" title="無敵">經典
論壇
</a></p><a href = "http://www.blueidea.com/" >藍色理想</a>';
var arr = findLinks(str);
</script>
會把所有的連結在頁面直接顯示出來。注意,
本帖遺留問題:如何執行從右到左的匹配。貌似JS 或者VBS 沒有提供這個功能2、JS 或
者VBS 不支援後行斷言。。用什麼方法實現這個功能
相關文章
- 通過js正規表示式例項學習正規表示式基本語法JS
- 正規表示式例項蒐集,通過例項來學習正規表示式。
- Java 正規表示式例項操作Java
- 正規表示式分組例項詳解
- JavaScript正規表示式校驗非正整數例項JavaScript
- JavaScript正規表示式備忘單附例項JavaScript
- PHP preg match正規表示式函式的操作例項PHP函式
- js正規表示式速查JS
- java 正規表示式 舉例Java
- JavaScript正規表示式校驗非零的正整數例項JavaScript
- 正規表示式元字元大整理字元
- shell 正規表示式詳細整理
- 例項程式碼詳解正規表示式匹配換行
- JavaScript正規表示式校驗非負整數例項JavaScript
- JS正規表示式入門JS
- JS正規表示式驗證JS
- JS正規表示式總結JS
- JS助記 ----- 正規表示式JS
- JS基礎:正規表示式JS
- JS中的正規表示式JS
- JS金額正規表示式JS
- JS常用正規表示式及驗證時間的正規表示式JS
- 簡單介紹正規表示式拆分url例項程式碼
- js中的正規表示式(1)JS
- JS筆記(15): 正規表示式JS筆記
- 關於JS的正規表示式JS
- JS正規表示式的驗證JS
- python正規表示式 小例幾則Python
- JS常用正規表示式備忘錄JS
- 淺談js中的正規表示式JS
- 學習正規表示式(js、C#)JSC#
- 正規表示式之零寬斷言例項詳解【基於PHP】PHP
- js正規表示式常用函式詳解(續)JS函式
- 正規表示式
- 正規表示式.
- 日常收集整理正規表示式驗證大全
- js正規表示式基本語法學習JS
- 【譯】JS常用正規表示式備忘錄JS
- AS3 js正規表示式 反向引用(backreference)S3JS