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


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 相关文章推荐
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
May 25 Javascript
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
JavaScript导出Excel实例详解
Nov 25 Javascript
js Calender控件使用详解
Jan 05 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
Backbone View 之间通信的三种方式
Aug 09 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
Javascript this 函数深入详解
Dec 13 Javascript
js实现开启密码大写提示
Dec 21 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
发两个小东西,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 htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python实现注册登录系统
2017/08/08 Python
python实现Adapter模式实例代码
2018/02/09 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python日志模块logbook使用方法
2019/09/19 Python
Python 如何实现访问者模式
2020/07/28 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
武汉某公司的C#笔试题面试题
2015/12/25 面试题
美术专业学生个人自我评价
2013/09/19 职场文书
年终考核评语
2014/01/19 职场文书
团拜会策划方案
2014/06/07 职场文书
小学班主任事迹材料
2014/12/17 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python