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


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 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
快速查找数组中的某个元素并返回下标示例
Sep 03 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
jQuery实现的图片轮播效果完整示例
Sep 12 Javascript
Three.js中网格对象MESH的属性与方法详解
Sep 27 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
Oct 29 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
Sep 11 Javascript
如何在JavaScript中创建具有多个空格的字符串?
Feb 23 Javascript
用JS写一个发布订阅模式
Nov 07 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
php生成随机数或者字符串的代码
2008/09/05 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jquery select下拉框操作的一些说明
2010/04/02 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JavaScript包装对象使用详解
2015/07/09 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python的pycurl包用法简介
2015/11/13 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python SQLite3简介
2018/02/22 Python
Python中反射和描述器总结
2018/09/23 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
static函数与普通函数有什么区别
2015/12/25 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
一夜的工作教学反思
2014/02/08 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
银行金融服务方案
2014/06/11 职场文书
员工年终考核评语
2014/12/31 职场文书
教导主任个人总结
2015/03/03 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
Go语言测试库testify使用学习
2022/07/23 Golang