String.prototype 几个简洁的字符处理函数 (转)
都是基于 String.prototype 的扩展:
起因是有个网友和我讨论两个函数,
一个是 isDateTime (判断字符是否是符合 yyyy-mm-dd hh:mm:ss日期格式)
另一个是 left 函数,类似vbscript的left 实现中英文字符的混合截取。
他两个函数都用了循环,还用了N多 if 语句,每个函数都超过了40行代码,问我有无好的办法精简一下。
于是,我就写出了下面的代码,不敢说最效率最高,但是已经是够精简了, left函数才1行
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>
转载于:https://www.cnblogs.com/RobotTech/archive/2006/12/29/607495.html
String.prototype 几个简洁的字符处理函数 (转)相关推荐
- String.prototype.substr()
概述 substr() 方法返回字符串中从指定位置开始到指定长度的子字符串. 语法 str.substr(start[, length]) 参数 start 开始提取字符的位置.如果为负值,则被看作 ...
- String.prototype.matchAll 正则一些常用方法
1.用一个正则表达式来得到所有匹配项. 目前,您可以通过几种方式获取给定正则表达式的所有匹配项. 1. RegExp.prototype.exec() 与 /g 如果正则表达式有/g标志,那么多次调用 ...
- [转]String.prototype使用
以下为web开发中常用到的js方法:收集并整理出来:简单的就不写出来了 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transition ...
- String.prototype是什么以及怎么使用
/String.prototype使用 String.prototype用于为某字符串对象新增方法,比如: 在javascript中有一方法replace,它是用于替换某字符串中第一个匹配的字符,如果 ...
- es6 --- String.prototype.padStart
从实际出发理解. 首先看下面代码 // js var dt = new Date(); console.log(dt); 下面想把时间格式化,写一个dateFormat函数 // js functio ...
- String.prototype.padStart()
String.prototype.padStart() ES6字符串新方法:填充字符串 String.prototype.padStart(maxLength,fillString='') Strin ...
- java string 截取_java string 怎样截取前n个字符?的解决方案列表
展开全部 java string 怎样截取前n个字符一般有两种方法: 方法一:使用如下代码: s=32313133353236313431303231363533e78988e69d833133336 ...
- ES10:Object.fromEntries()、String.prototype.trim()、Array.prototype.flat()、Array.prototype.flatMap()
Object.fromEntries(iterable) 把键值对列表(二维数组)转换为一个对象,这个方法和 Object.entries() 相对 Object.fromEntries([['foo ...
- npm install 安装use String.prototype.padStart()卡住(已解决)
使用npm install安装以来过程中出现卡顿,发现到use String.prototype.padStart()这里一直卡住: 解决办法: 先删除 markdown 相关内容,步骤如下: 在vu ...
最新文章
- HybridDB · 源码分析 · MemoryContext 内存管理和内存异常分析
- GPT-3会做小学应用题了!60亿击败1750亿,并非参数越大越好
- creat_caltab生成六边形标定板(黑底白点)
- shell生成随机文件名
- 计算机硬件知识教学的信息化手段,《计算机硬件组成》教学设计
- 【链表】单链表的排序(归并排序)
- MMA7455加速度传感器测量角度
- 组合数学6--母函数与递推关系
- vue调用摄像头pc+移动端
- pla3d打印材料密度_最新研究:PLA在3D打印中产生的有害气体最少
- 页面里的在线实时聊天实现
- 2019,苹果艰难又关键的一年
- 事务原子性、一致性、持久性的实现原理
- L3-020 至多删三个字符 (30 分)
- 如何使用hugo搭建个人博客(五):添加站内搜索(gcse)
- jxr怎么变成jpg_手机怎样把照片格式改为jpg
- 中控考勤机web3.0登录账号密码
- iOS 11 NFC技术
- 【邢不行|量化小讲堂系列56-实战篇】量化策略回测表现好,但实盘却很差?可能是底层数据就错啦!
- 21M的虚拟机VMware Workstation中文绿色版
热门文章
- python整体缩进笔记_python笔记1
- IntelliJ IDEA scala的源码设置
- latex的 多行注释_Latex图形注释的实现方法
- python二维游戏示例_Python实现的井字棋(Tic Tac Toe)游戏示例
- 我的天,强化学习还能用在自动驾驶领域?
- 为什么MCU也要支持AI功能?
- linux mysql 最小安装,Linux最小化安装之安装mysql
- top统计mysql性能_mytop安装,使用mytop监控MySQL性能
- ios点击大头针气泡不弹出_画家双手抖不停,画不了画丢了工作,却迎合抖动创造出一个个奇迹...
- 怎么读取mysql库绘制柱状图_从数据库中取出最近三十天的数据并生成柱状图