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


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 相关文章推荐
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
深入分析Cookie的安全性问题
Mar 01 Javascript
JavaScript实现in-place思想的快速排序方法
Aug 07 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
Oct 11 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
Jan 20 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 Javascript
ES6学习教程之对象字面量详解
Oct 09 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
koa-router源码学习小结
Sep 07 Javascript
JS中队列和双端队列实现及应用详解
Sep 29 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
如何给phpadmin一个保护
2006/10/09 PHP
php简单的会话类代码
2011/08/08 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php算法实例分享
2015/07/14 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
JS常用函数使用指南
2014/11/23 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
python实现堆栈与队列的方法
2015/01/15 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python实现把xml或xsl转换为html格式
2015/04/08 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
浅析python函数式编程
2020/09/26 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
校园学雷锋活动月总结
2014/03/09 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
文明单位创建材料
2014/12/24 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS