鳕鱼天空

This is Mr Wang's Tech Blog.

JS合并两个数组的方法

转自:微点阅读  https://www.weidianyuedu.com/content/3817386077036.html

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况。比如: var a = [1,2,3]; var b = [4,5,6];有两个数组a、b,需求是将两个数组合并成一个。方法如下:1、concat

js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果。

var c = a.concat(b);//c=[1,2,3,4,5,6];

这里有一个问题,concat方法连接a、b两个数组后,a、b两个数组的数据不变,同时会返回一个新的数组。这样当我们需要进行多次的数组合并时,会造成很大的内存浪费,所以这个方法肯定不是最好的。

2、for循环

大概的思路是:遍历其中一个数组,把该数组中的所有元素依次添加到另外一个数组中。直接上代码:

for(var i in b){ a.push(b[i]);}

这样的写法可以解决第一种方案中对内存的浪费,但是会有另一个问题:丑!这么说不是没有道理,如果能只用一行代码就搞定,岂不快哉~

3、apply

函数的apply方法有一个特性,那就是func.apply(obj,argv),argv是一个数组。所以我们可以利用这点,直接上代码:

a.push.apply(a,b);

调用a.push这个函数实例的apply方法,同时把,b当作参数传入,这样a.push这个方法就会遍历b数组的所有元素,达到合并的效果。

这里可能有点绕,我们可以把b看成[4,5,6],变成这样:

a.push.apply(a,[4,5,6]);

然后上面的操作就等同于:

a.push(4,5,6);

这样就很清楚了!

另外,还要注意两个小问题:

1)以上3种合并方法并没有考虑过a、b两个数组谁的长度更小。

所以好的做法是预先判断a、b两个数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数!

2)有时候我们不希望原数组(a、b)改变,这时就只能使用concat了。

js 正则表达式

匹配所有ascii码 :

/[\x00-\xff]+/g

页面输入框js正则验证输入值为数字,且只保留小数点后两位

function clearNoNum(obj)    
{    
    //先把非数字的都替换掉,除了数字和.    
    obj.value = obj.value.replace(/[^\d.]/g,"");    
    //保证只有出现一个.而没有多个.    
    obj.value = obj.value.replace(/\.{2,}/g,".");    
    //必须保证第一个为数字而不是.    
    obj.value = obj.value.replace(/^\./g,"");    
    //保证.只出现一次,而不能出现两次以上    
    obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");    
    //只能输入两个小数  
    obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');   
}  

世上最全的正则JS表达式,只有你想不到,没有你找不到

1.由数字、26个英文字母或者下划线组成的字符串:
    ^[0-9a-zA-Z_]{1,}$
2.非负整数(正整数 + 0 ):
    ^/d+$
3. 正整数:
    ^[0-9]*[1-9][0-9]*$
4.非正整数(负整数 + 0):
    ^((-/d+)|(0+))$
5. 负整数 :
    ^-[0-9]*[1-9][0-9]*$
6.整数:    
    ^-?/d+$
7.非负浮点数(正浮点数 + 0):
    ^/d+(/./d+)?$
8.正浮点数 :
    ^(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*))$
9. 非正浮点数(负浮点数 + 0):
    ^((-/d+(/./d+)?)|(0+(/.0+)?))$
10.负浮点数 :
    ^(-(([0-9]+/.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*/.[0-9]+)|([0-9]*[1-9][0-9]*)))$
11. 浮点数 :
    ^(-?/d+)(/./d+)?$
12.由26个英文字母组成的字符串 :    
    ^[A-Za-z]+$
13. 由26个英文字母的大写组成的字符串 :
    ^[A-Z]+$
14.由26个英文字母的小写组成的字符串 :
    ^[a-z]+$
15. 由数字和26个英文字母组成的字符串 :
    ^[A-Za-z0-9]+$
16.由数字、26个英文字母或者下划线组成的字符串 :    
    ^/w+$
17.email地址 :
    ^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$
18.url:    
    ^[a-zA-z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$
19. 年-月-日:
    /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/
20.月/日/年:
    /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/
21.Emil:
    ^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$
22. 电话号码:
    (d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?
23.IP地址:
    ^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$
24. 匹配中文字符的正则表达式:
    [/u4e00-/u9fa5]
25.匹配双字节字符(包括汉字在内):
    [^/x00-/xff]
26. 匹配空行的正则表达式:
    /n[/s| ]*/r
27.匹配HTML标记的正则表达式:
    /<(.*)>.*<///1>|<(.*) //>/
28.匹配首尾空格的正则表达式:
    (^/s*)|(/s*$)
29.匹配Email地址的正则表达式:
    /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
30. 匹配网址URL的正则表达式:
    ^[a-zA-z]+://(//w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S*)?$
31. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
    ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
32. 匹配国内电话号码:
    (/d{3}-|/d{4}-)?(/d{8}|/d{7})?
33.匹配腾讯QQ号:
    ^[1-9]*[1-9][0-9]*$
34. 只能输入数字:
    ^[0-9]*$
35.只能输入n位的数字:
    ^/d{n}$
36.只能输入至少n位的数字:
    ^/d{n,}$
37.只能输入m~n位的数字:
    ^/d{m,n}$
38.只能输入零和非零开头的数字:
    ^(0|[1-9][0-9]*)$
39.只能输入有两位小数的正实数:
    ^[0-9]+(.[0-9]{2})?$
40. 只能输入有1~3位小数的正实数:
    ^[0-9]+(.[0-9]{1,3})?$
41.只能输入非零的正整数:
    ^/+?[1-9][0-9]*$
42. 只能输入非零的负整数:
    ^/-[1-9][0-9]*$
43.只能输入长度为3的字符:
    ^.{3}$
44. 只能输入由26个英文字母组成的字符串:
    ^[A-Za-z]+$
45.只能输入由26个大写英文字母组成的字符串:
    ^[A-Z]+$
46. 只能输入由26个小写英文字母组成的字符串:
    ^[a-z]+$
47.只能输入由数字和26个英文字母组成的字符串:
    ^[A-Za-z0-9]+$
48. 只能输入由数字和26个英文字母或者下划线组成的字符串:
    ^/w+$
49.验证用户密码(正确格式为: 以字母开头,长度在5~17 之间,只能包含字符、数字和下划线)
    ^[a-zA-Z]/w{5,17}$
50.验证是否包含有 ^%&',;=?$/"等字符:
    [^%&',;=?$/x22]+
51.只能输入汉字:
    ^[\u4e00-\u9fa5]{0,}$
52、只含有汉字、数字、字母、下划线不能以下划线开头和结尾
    ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$
53、只含有汉字、数字、字母、下划线,下划线位置不限
    ^[a-zA-Z0-9_\u4e00-\u9fa5]+$
54、2~4个汉字
    @"^[\u4E00-\u9FA5]{2,4}$

[转]js复制内容到剪贴板代码,js复制代码

例子

<script type="text/JavaScript">
    function jsCopy(){
        var e=document.getElementById("contents");//对象是contents
        e.select(); //选择对象
        document.execCommand("Copy"); //执行浏览器复制命令
    }
</script>
<textarea id="contents" cols="40" rows="5"></textarea>
<br />
<input type="button" onClick="jsCopy();" value="复制" />

js复制无非是以下三步:
1、获取复制的对象:document.getElementById("contents")这句话就是获取ID=“contents”的textarea。
2、全选对象的内容:e.select()
3、用execCommand("")函数将内容复制。
下面来详细介绍execCommand("")函数的参数:
1、格式:document.execCommand(sCommand[,交互方式, 动态参数])
2、参数详解:

 

001 1、〖全选〗命令的实现
002 [格式]:document.execCommand(”selectAll”)
003 [说明]将选种网页中的全部内容!
004  
005 2、〖打开〗命令的实现
006 [格式]:document.execCommand(”open”)
007 [说明]这跟VB等编程设计中的webbrowser控件中的命令有些相似,大家也可依此琢磨琢磨。
008  
009 3、〖另存为〗命令的实现
010 [格式]:document.execCommand(”saveAs”)
011 [说明]将该网页保存到本地盘的其它目录!
012  
013 4、〖打印〗命令的实现
014 [格式]:document.execCommand(”print”)
015 [说明]当然,你必须装了打印机!
016  
017 Js代码下面列出的是指令参数及意义
018  
019 //相当于单击文件中的打开按钮
020 document.execCommand(”Open”);
021  
022 //将当前页面另存为
023 document.execCommand(”SaveAs”);
024  
025 //剪贴选中的文字到剪贴板;
026 document.execCommand(”Cut”,”false”,null);
027  
028 //删除选中的文字;
029 document.execCommand(”Delete”,”false”,null);
030  
031 //改变选中区域的字体;
032 document.execCommand(”FontName”,”false”,sFontName);
033  
034 //改变选中区域的字体大小;
035 document.execCommand(”FontSize”,”false”,sSize|iSize);
036  
037 //设置前景颜色;
038 document.execCommand(”ForeColor”,”false”,sColor);
039  
040 //使绝对定位的对象可直接拖动;
041 document.execCommand(”2D-Position”,”false”,”true”);
042  
043 //使对象定位变成绝对定位;
044 document.execCommand(”AbsolutePosition”,”false”,”true”);
045  
046 //设置背景颜色;
047 document.execCommand(”BackColor”,”false”,sColor);
048  
049 //使选中区域的文字加粗;
050 document.execCommand(”Bold”,”false”,null);
051  
052 //复制选中的文字到剪贴板;
053 document.execCommand(”Copy”,”false”,null);
054  
055 //设置指定锚点为书签;
056 document.execCommand(”CreateBookmark”,”false”,sAnchorName);
057  
058 //将选中文本变成超连接,若第二个参数为true,会出现参数设置对话框;
059 document.execCommand(”CreateLink”,”false”,sLinkURL);
060  
061 //设置当前块的标签名;
062 document.execCommand(”FormatBlock”,”false”,sTagName);
063  
064 //相当于单击文件中的打开按钮
065 document.execCommand(”Open”);
066  
067 //将当前页面另存为
068 document.execCommand(”SaveAs”);
069  
070 //剪贴选中的文字到剪贴板;
071 document.execCommand(”Cut”,”false”,null);
072  
073 //删除选中的文字;
074 document.execCommand(”Delete”,”false”,null);
075  
076 //改变选中区域的字体;
077 document.execCommand(”FontName”,”false”,sFontName);
078  
079 //改变选中区域的字体大小;
080 document.execCommand(”FontSize”,”false”,sSize|iSize);
081  
082 //设置前景颜色;
083 document.execCommand(”ForeColor”,”false”,sColor);
084  
085 //使绝对定位的对象可直接拖动;
086 document.execCommand(”2D-Position”,”false”,”true”);
087  
088 //使对象定位变成绝对定位;
089 document.execCommand(”AbsolutePosition”,”false”,”true”);
090  
091 //设置背景颜色;
092 document.execCommand(”BackColor”,”false”,sColor);
093  
094 //使选中区域的文字加粗;
095 document.execCommand(”Bold”,”false”,null);
096  
097 //复制选中的文字到剪贴板;
098 document.execCommand(”Copy”,”false”,null);
099  
100 //设置指定锚点为书签;
101 document.execCommand(”CreateBookmark”,”false”,sAnchorName);
102  
103 //将选中文本变成超连接,若第二个参数为true,会出现参数设置对话框;
104 document.execCommand(”CreateLink”,”false”,sLinkURL);
105  
106 //设置当前块的标签名;
107 document.execCommand(”FormatBlock”,”false”,sTagName);

 

 

注:火狐不支持此方法!

 

找了好久的一个方法,很管用,网上很多文章一大抄,拿下来根本没法用,他们自己也没有试验过,就写,真是服了