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


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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
jquery tools 系列 scrollable(2)
Sep 06 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
js HTML5多媒体影音播放
Oct 17 Javascript
使用Javascript监控前端相关数据的代码
Oct 27 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
Mar 10 Javascript
Angular实现表单验证功能
Nov 13 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 Javascript
JavaScript适配器模式原理与用法实例详解
Mar 09 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
wordpress之wp-settings.php
2007/08/17 PHP
php session 检测和注销
2009/03/16 PHP
php SQL之where语句生成器
2009/03/24 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
js子页面获取父页面数据示例
2014/05/15 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
python3中dict(字典)的使用方法示例
2017/03/22 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python调用API实现智能回复机器人
2018/04/10 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Internet体系结构
2014/12/21 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
前台接待岗位职责
2013/12/03 职场文书
广告学毕业生求职信
2014/01/30 职场文书
离婚协议书标准格式
2014/10/04 职场文书
员工开除通知书
2015/04/25 职场文书
中秋节感想
2015/08/10 职场文书