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


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动态加载实现方法一
Aug 22 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
JavaScript闭包实例详解
Jun 03 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
发两个小东西,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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
PHP简介
2006/10/09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
python 常见字符串与函数的用法详解
2018/11/23 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
公司周年庆典邀请函
2014/01/12 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
防汛通知
2015/04/25 职场文书
社区党建工作总结2015
2015/05/13 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby