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


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 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
Apr 27 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
Jun 18 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 Javascript
angular的输入和输出的使用方法
Sep 22 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
uniapp与webview之间的相互传值的实现
Jun 29 Javascript
vue 弹出遮罩层样式实例
Jul 22 Javascript
Javascript如何递归遍历本地文件夹
Aug 06 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
来自PHP.NET的入门教程
2006/10/09 PHP
php学习 字符串课件
2008/06/15 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
php将html转为图片的实现方法
2017/05/19 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
wxPython的安装图文教程(Windows)
2017/12/28 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
python修改字典键(key)的方法
2019/08/05 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
全球虚拟主机商:HostGator
2017/02/06 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
应用数学自荐书范文
2013/11/24 职场文书
会走路的树教学反思
2014/02/20 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
社团活动总结格式
2014/08/29 职场文书
学习保证书
2015/01/17 职场文书
督导岗位职责
2015/02/04 职场文书
张思德观后感
2015/06/09 职场文书
爱的教育读书笔记
2015/06/26 职场文书
利用Redis实现点赞功能的示例代码
2022/06/28 Redis