几个高效,简洁的字符处理函数
几个高效,简洁的字符处理函数
发布时间:2016-12-30 来源:查字典编辑
摘要:都是基于String.prototype的扩展:起因是有个网友和我讨论两个函数,一个是isDateTime(判断字符是否是符合yyyy-mm...

都是基于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/*

30alert("2002-12-1210:10:40".isDateTime())//true

31alert("2002-02-3110:10:40".isDateTime())//false

32alert("2002-22-3110:10:40".isDateTime())//false

33alert("2002-22-3130:10:40".isDateTime())//false

34*/

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/*

43alert("http://www.google.com/".startsWith("http://","ftp://","telnet://"))//true满足其中任何一个就返回true

44alert("http://www.google.com/".startsWith("https://","file://"))//false

45alert("abc".startsWith("a"))//true

46*/

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/*

62alert("abcdefg".left(3)==="abc")

63alert("中国人cdefg".left(5)==="中国")

64alert("中国abcdefg".left(5)==="中国a")

65*/

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/*

76alert("abcdefg".right(3)==="efg")

77alert("cdefg中国人".right(5)==="国人")

78alert("abcdefg中国".right(5)==="g中国")

79*/

80

81</script>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类