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


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 相关文章推荐
基于jquery的回到页面顶部按钮
Jun 27 Javascript
JavaScript避免代码的重复执行经验技巧分享
Apr 17 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
Feb 26 Javascript
jQuery团购倒计时特效实现方法
May 07 Javascript
javascript自执行函数
Feb 10 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
记一次用ts+vuecli4重构项目的实现
May 21 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
发两个小东西,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获取汉字的拼音(全部与首字母)
2013/06/27 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
清除输入框内的空格
2016/12/21 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
js实现小时钟效果
2020/03/25 Javascript
解析Python中的二进制位运算符
2015/05/13 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python实现人机五子棋
2020/03/25 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
如何用python写个模板引擎
2021/01/14 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
综合实践教学反思
2014/01/31 职场文书
工程项目建议书范文
2014/03/12 职场文书
后备干部培训方案
2014/05/22 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技