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


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 相关文章推荐
onsubmit阻止form表单提交与onclick的相关操作
Sep 03 Javascript
JS中图片缓冲loading技术的实例代码
Aug 29 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
原生js调用json方法总结
Feb 22 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
Oct 12 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
vue + typescript + 极验登录验证的实现方法
Jun 27 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
Mar 02 Javascript
JavaScript前端面试组合函数
Jun 21 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中ADODB类详解
2008/03/25 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php+mysql数据库查询实例
2015/01/21 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
[原创]图片分页查看
2006/08/28 Javascript
event.srcElement+表格应用
2006/08/29 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python 获取网页编码方式实现代码
2017/03/11 Python
Python编写登陆接口的方法
2017/07/10 Python
python获取代理IP的实例分享
2018/05/07 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
导致python中import错误的原因是什么
2020/07/01 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
C++的几个面试题附答案
2016/08/03 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
酒店执行总经理岗位职责
2013/12/15 职场文书
运动会演讲稿
2014/05/07 职场文书
2014年安全员工作总结
2014/11/13 职场文书
司机岗位职责
2015/02/04 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书