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

时间:2021-05-25

都是基于String.prototype的扩展:
起因是有个网友和我讨论两个函数,
一个是isDateTime(判断字符是否是符合yyyy-mm-ddhh:mm:ss日期格式)
另一个是left函数,类似vbscript的left实现中英文字符的混合截取。
他两个函数都用了循环,还用了N多if语句,每个函数都超过了40行代码,问我有无好的办法精简一下。
于是,我就写出了下面的代码,不敢说最效率最高,但是已经是够精简了,left函数才1行
复制代码 代码如下:
1<scripttype="text/javascript">
2
3//byGo_Rush(阿舜)fromhttp://ashun.cnblogs.com/
4
5function$A(arrayLike){
6for(vari=0,ret=[];i<arrayLike.length;i++)ret.push(arrayLike[i])
7returnret
8};
9Array.prototype.any=function(f){
10for(vari=0;i<this.length;i++)if(f(this[i],i,this))returntrue;
11returnfalse
12};
13
14
15
16//判断字符串是否符合yyyy-mm-ddhh:mm:ss的日期格式,格式正确而且闰年闰月等也要正确
17
18String.prototype.isDateTime=function(){
19try{
20vararr=(this.length==19)?this.split(/\D/):[]
21--arr[1]
22eval("vard=newDate("+arr.join(",")+")")
23returnNumber(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){returnfalse}
27}
28
29
35
36
37//检查是否以特定的字符串结束
38String.prototype.startsWith=function(){
39var_string=this
40return$A(arguments).any(function(value){return_string.slice(0,value.length)==value})
41};
42
47
48
49//检查是否以特定的字符串结束
50String.prototype.endsWith=function(){
51var_string=this
52return$A(arguments).any(function(value){return_string.slice(value.length*(-1))==value})
53};
54
55
56
57//从左边截取n个字符,如果包含汉字,则汉字按两个字符计算
58String.prototype.left=function(n){
59returnthis.slice(0,n-this.slice(0,n).replace(/[\x00-\xff]/g,"").length)
60};
61
66
67
68
69
70//从右边截取n个字符,如果包含汉字,则汉字按两个字符计算
71String.prototype.right=function(n){
72returnthis.slice(this.slice(-n).replace(/[\x00-\xff]/g,"").length-n)
73};
74
75
80
81</script>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章