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


Posted in Javascript onApril 12, 2007

              都是基于 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>
Javascript 相关文章推荐
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
javascript实现密码强度显示
Mar 18 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
javascript中arguments,callee,caller详解
Mar 16 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
Angular使用$http.jsonp发送跨站请求的方法
Mar 16 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
Jan 23 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 #Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 #Javascript
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 #Javascript
FireFox中textNode分片的问题
Apr 10 #Javascript
AJAX架构之Dojo篇
Apr 10 #Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
Apr 10 #Javascript
给moz-firefox下添加IE方法和属性
Apr 10 #Javascript
You might like
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python实现大文件排序的方法
2015/07/10 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
医药工作者的求职信范文
2013/09/21 职场文书
《春雨》教学反思
2014/04/24 职场文书
C++程序员求职信
2014/05/07 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
工作检讨书范文
2015/01/23 职场文书
三方合作意向书范本
2015/05/09 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python