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


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 相关文章推荐
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
javascript表单验证和Window详解
Dec 11 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
Mar 30 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
JS简单实现自定义右键菜单实例
May 31 Javascript
Vuex实现计数器以及列表展示效果
Mar 10 Javascript
JavaScript实现的简单Tab点击切换功能示例
Jul 06 Javascript
fetch 如何实现请求数据
Dec 20 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
vue动态子组件的两种实现方式
Sep 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
详谈js模块化规范
2017/07/07 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
python服务器端收发请求的实现代码
2014/09/29 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
在python中做正态性检验示例
2019/12/09 Python
python实现邮件循环自动发件功能
2020/09/11 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
土木工程应届生自荐信
2013/09/24 职场文书
商业活动邀请函
2014/02/04 职场文书
行政副总岗位职责
2014/02/23 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
班级出游活动计划书
2014/08/15 职场文书
个性与发展自我评价
2015/03/06 职场文书
投资合作意向书范本
2015/05/08 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis