幾個高效,簡潔的字符處理函數(shù)
更新時間:2007年04月12日 00:00:00 作者:
都是基于 String.prototype 的擴(kuò)展:
起因是有個網(wǎng)友和我討論兩個函數(shù),
一個是 isDateTime (判斷字符是否是符合 yyyy-mm-dd hh:mm:ss日期格式)
另一個是 left 函數(shù),類似vbscript的left 實(shí)現(xiàn)中英文字符的混合截取。
他兩個函數(shù)都用了循環(huán),還用了N多 if 語句,每個函數(shù)都超過了40行代碼,問我有無好的辦法精簡一下。
于是,我就寫出了下面的代碼,不敢說最效率最高,但是已經(jīng)是夠精簡了, left函數(shù)才1行
1 <script type="text/javascript">
2
3 //by Go_Rush(阿舜) from http://ashun.cnblogs.com/
4
5 function $A(arrayLike){
6 for(var i=0,ret=[];i<arrayLike.length;i++) ret.push(arrayLike[i])
7 return ret
8 };
9 Array.prototype.any=function(f){
10 for(var i=0;i<this.length;i++) if (f(this[i],i,this)) return true;
11 return false
12 };
13
14
15
16 //判斷 字符串 是否符合 yyyy-mm-dd hh:mm:ss的日期格式, 格式正確而且閏年閏月等也要正確
17
18 String.prototype.isDateTime=function(){
19 try{
20 var arr=(this.length==19)?this.split(/\D/):[]
21 --arr[1]
22 eval("var d=new Date("+arr.join(",")+")")
23 return Number(arr[0])==d.getFullYear() && Number(arr[1])==d.getMonth()
24 && Number(arr[2])==d.getDate() && Number(arr[3])==d.getHours()
25 && Number(arr[4])==d.getMinutes() && Number(arr[5])==d.getSeconds()
26 }catch(x){return false}
27 }
28
29 /*
30 alert("2002-12-12 10:10:40".isDateTime()) //true
31 alert("2002-02-31 10:10:40".isDateTime()) //false
32 alert("2002-22-31 10:10:40".isDateTime()) //false
33 alert("2002-22-31 30:10:40".isDateTime()) //false
34 */
35
36
37 // 檢查 是否以特定的字符串結(jié)束
38 String.prototype.startsWith=function(){
39 var _string=this
40 return $A(arguments).any(function(value){return _string.slice(0,value.length)==value})
41 };
42 /*
43 alert("http://www.google.com/".startsWith("http://","ftp://","telnet://")) //true 滿足其中任何一個就返回 true
44 alert("http://www.google.com/".startsWith("https://","file://")) //false
45 alert("abc".startsWith("a")) //true
46 */
47
48
49 // 檢查 是否以特定的字符串結(jié)束
50 String.prototype.endsWith=function(){
51 var _string=this
52 return $A(arguments).any(function(value){return _string.slice(value.length*(-1))==value})
53 };
54
55
56
57 //從左邊截取n個字符 ,如果包含漢字,則漢字按兩個字符計算
58 String.prototype.left=function(n){
59 return this.slice(0,n-this.slice(0,n).replace(/[\x00-\xff]/g,"").length)
60 };
61 /*
62 alert("abcdefg".left(3)==="abc")
63 alert("中國人cdefg".left(5)==="中國")
64 alert("中國abcdefg".left(5)==="中國a")
65 */
66
67
68
69
70 //從右邊截取n個字符 ,如果包含漢字,則漢字按兩個字符計算
71 String.prototype.right=function(n){
72 return this.slice(this.slice(-n).replace(/[\x00-\xff]/g,"").length-n)
73 };
74
75 /*
76 alert("abcdefg".right(3)==="efg")
77 alert("cdefg中國人".right(5)==="國人")
78 alert("abcdefg中國".right(5)==="g中國")
79 */
80
81 </script>
起因是有個網(wǎng)友和我討論兩個函數(shù),
一個是 isDateTime (判斷字符是否是符合 yyyy-mm-dd hh:mm:ss日期格式)
另一個是 left 函數(shù),類似vbscript的left 實(shí)現(xiàn)中英文字符的混合截取。
他兩個函數(shù)都用了循環(huán),還用了N多 if 語句,每個函數(shù)都超過了40行代碼,問我有無好的辦法精簡一下。
于是,我就寫出了下面的代碼,不敢說最效率最高,但是已經(jīng)是夠精簡了, left函數(shù)才1行
復(fù)制代碼 代碼如下:
1 <script type="text/javascript">
2
3 //by Go_Rush(阿舜) from http://ashun.cnblogs.com/
4
5 function $A(arrayLike){
6 for(var i=0,ret=[];i<arrayLike.length;i++) ret.push(arrayLike[i])
7 return ret
8 };
9 Array.prototype.any=function(f){
10 for(var i=0;i<this.length;i++) if (f(this[i],i,this)) return true;
11 return false
12 };
13
14
15
16 //判斷 字符串 是否符合 yyyy-mm-dd hh:mm:ss的日期格式, 格式正確而且閏年閏月等也要正確
17
18 String.prototype.isDateTime=function(){
19 try{
20 var arr=(this.length==19)?this.split(/\D/):[]
21 --arr[1]
22 eval("var d=new Date("+arr.join(",")+")")
23 return Number(arr[0])==d.getFullYear() && Number(arr[1])==d.getMonth()
24 && Number(arr[2])==d.getDate() && Number(arr[3])==d.getHours()
25 && Number(arr[4])==d.getMinutes() && Number(arr[5])==d.getSeconds()
26 }catch(x){return false}
27 }
28
29 /*
30 alert("2002-12-12 10:10:40".isDateTime()) //true
31 alert("2002-02-31 10:10:40".isDateTime()) //false
32 alert("2002-22-31 10:10:40".isDateTime()) //false
33 alert("2002-22-31 30:10:40".isDateTime()) //false
34 */
35
36
37 // 檢查 是否以特定的字符串結(jié)束
38 String.prototype.startsWith=function(){
39 var _string=this
40 return $A(arguments).any(function(value){return _string.slice(0,value.length)==value})
41 };
42 /*
43 alert("http://www.google.com/".startsWith("http://","ftp://","telnet://")) //true 滿足其中任何一個就返回 true
44 alert("http://www.google.com/".startsWith("https://","file://")) //false
45 alert("abc".startsWith("a")) //true
46 */
47
48
49 // 檢查 是否以特定的字符串結(jié)束
50 String.prototype.endsWith=function(){
51 var _string=this
52 return $A(arguments).any(function(value){return _string.slice(value.length*(-1))==value})
53 };
54
55
56
57 //從左邊截取n個字符 ,如果包含漢字,則漢字按兩個字符計算
58 String.prototype.left=function(n){
59 return this.slice(0,n-this.slice(0,n).replace(/[\x00-\xff]/g,"").length)
60 };
61 /*
62 alert("abcdefg".left(3)==="abc")
63 alert("中國人cdefg".left(5)==="中國")
64 alert("中國abcdefg".left(5)==="中國a")
65 */
66
67
68
69
70 //從右邊截取n個字符 ,如果包含漢字,則漢字按兩個字符計算
71 String.prototype.right=function(n){
72 return this.slice(this.slice(-n).replace(/[\x00-\xff]/g,"").length-n)
73 };
74
75 /*
76 alert("abcdefg".right(3)==="efg")
77 alert("cdefg中國人".right(5)==="國人")
78 alert("abcdefg中國".right(5)==="g中國")
79 */
80
81 </script>
相關(guān)文章
10個必備的JavaScript?async/await工具函數(shù)分享
當(dāng)談到異步編程時,async/await是JavaScript中常用的功能之一,本文為大家整理了10個常用的await和async函數(shù)示例,感興趣的小伙伴可以參考一下2023-12-12JavaScript高級程序設(shè)計 閱讀筆記(十四) js繼承機(jī)制的實(shí)現(xiàn)
繼承是面向?qū)ο笳Z言的必備特征,即一個類能夠重用另一個類的方法和屬性。在JavaScript中繼承方式的實(shí)現(xiàn)方式主要有以下五種:對象冒充、call()、apply()、原型鏈、混合方式2012-08-08js canvas實(shí)現(xiàn)隨機(jī)粒子特效
這篇文章主要為大家詳細(xì)介紹了js canvas隨機(jī)粒子特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04laravel實(shí)現(xiàn)中文和英語互相切換的例子
今天小編就為大家分享一篇laravel實(shí)現(xiàn)中文和英語互相切換的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09Javascript 的addEventListener()及attachEvent()區(qū)別分析
大家都知道事件的用法就是當(dāng)某個事件(狀況)被觸發(fā)了之后就會去執(zhí)行某個Function, 尤其是Javascript, 在當(dāng)紅AJAX的催化下, 了解Javascript的Event用法更加重要, 在這里就大概介紹一下avascript的Event用法.2009-05-05