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


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 学习笔记
Mar 05 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
document节点对象的获取方式示例介绍
Dec 24 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
May 03 Javascript
Angular4 中常用的指令入门总结
Jun 12 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
Jan 22 Javascript
学习node.js 断言的使用详解
Mar 18 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获取post中的json数据的实现方法
2011/06/08 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
JavaScript中的函数(二)
2015/12/23 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
canvas实现钟表效果
2017/02/13 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
机关道德讲堂实施方案
2014/03/15 职场文书
文明倡议书范文
2014/04/15 职场文书
网页美工求职信范文
2014/04/17 职场文书
广告宣传策划方案
2014/05/21 职场文书
机关保密承诺书
2014/06/03 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS