几个高效,简洁的字符处理函数

所属分类: 网络编程 / JavaScript 阅读数: 1033
收藏 0 赞 0 分享
              都是基于 String.prototype 的扩展:
 起因是有个网友和我讨论两个函数,
一个是 isDateTime (判断字符是否是符合 yyyy-mm-dd hh:mm:ss日期格式)
另一个是 left 函数,类似vbscript的left 实现中英文字符的混合截取。
他两个函数都用了循环,还用了N多 if 语句,每个函数都超过了40行代码,问我有无好的办法精简一下。
于是,我就写出了下面的代码,不敢说最效率最高,但是已经是够精简了, left函数才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 // 检查 是否以特定的字符串结束 
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 // 检查 是否以特定的字符串结束 
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>
更多精彩内容其他人还在看

Node.js事件的正确使用方法

这篇文章主要给大家介绍了关于Node.js事件的正确使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

微信小程序自定义导航栏实例代码

这篇文章主要给大家介绍了关于微信小程序自定义导航栏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

js字符串处理之绝妙的代码

这篇文章主要介绍了js字符串处理之绝妙的代码,包括字符串去重、将字符放在对象中遍历拼接出字符串、把字符串的奇数位和偶数位分别提取到两个数组中、将两个数组按奇数位和偶数位插入拼接为字符串,有时候需要对字符进行处理的时候可以用得到
收藏 0 赞 0 分享

vue设计一个倒计时秒杀的组件详解

这篇文章主要介绍了vue设计一个倒计时秒杀的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解服务端预渲染之Nuxt(介绍篇)

这篇文章主要介绍了详解服务端预渲染之Nuxt(介绍篇),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

javascrit中undefined和null的区别详解

这篇文章主要介绍了javascrit中undefined和null的区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈javascript中的prototype和__proto__的理解

这篇文章主要介绍了浅谈javascript中的prototype和__proto__的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解vue中this.$emit()的返回值是什么

这篇文章主要介绍了详解vue中this.$emit()的返回值是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

浅谈express.js框架中间件(middleware)

这篇文章主要介绍了浅谈express.js框架中间件(middleware),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

vue自定义指令directive的使用方法

这篇文章主要介绍了vue自定义指令directive的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多