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


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 相关文章推荐
js原型链原理看图说明
Jul 07 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
Dec 02 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 Javascript
Bootstrap模仿起筷首页效果
May 09 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
Jun 13 Javascript
JavaScript实现页面定时刷新(定时器,meta)
Oct 12 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
Feb 08 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 Javascript
GOJS+VUE实现流程图效果
Dec 01 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获取当前相对于域名目录的方法
2015/06/26 PHP
php之可变变量的实例详解
2017/09/12 PHP
Javascript Object.extend
2010/05/18 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python变量类型知识点总结
2019/02/18 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python实现SMTP邮件发送
2020/06/16 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
Python 求向量的余弦值操作
2021/03/04 Python
意大利在线药房:Saninforma
2021/02/11 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
大四自我鉴定范文
2013/10/06 职场文书
大学生个人事迹材料
2014/01/21 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
入党函调证明材料
2014/12/24 职场文书
承诺函格式模板
2015/01/21 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
小学班级标语口号大全
2015/12/26 职场文书