记录日常点点滴滴,欢迎来到我的小站。

0%

使用方法

1
2
3
var checkNum = /^[A-Za-z0-9]+$/;

checkNum.test($(this).val());

1.非负整数 /^/d+$/

2.正整数 /^[0-9][1-9][0-9]$/

3.非正整数 /^((-/d+)|(0+))$/

4.负整数 /^-[0-9][1-9][0-9]$/

5.整数 /^-?/d+$/

6.非负浮点数 /^/d+(/./d+)?$/

7.正浮点数 /^(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9]))$/

8.非正浮点数 /^((-/d+(/./d+)?)|(0+(/.0+)?))$/

9.负浮点数 /^(-(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9])))$/

10.浮点数 /^(-?/d+)(/./d+)?$/

11.数字 /^/d+(/.{1}/d+)?$/

12.由26个英文字母组成的字符串 /^[A-Za-z]+$/

13.由26个英文字母的大写组成的字符串 /^[A-Z]+$/

14.由26个英文字母的小写组成的字符串 /^[a-z]+$/

15.由数字和26个英文字母组成的字符串 /^[A-Za-z0-9]+$/

16.由数字、26个英文字母或者下划线组成的字符串 /^/w+$/

17.匹配所有单字节长度的字符组成的字符串 /^[/x00-/xff]+$/

18.匹配所有双字节长度的字符组成的字符串 /^[^/x00-/xff]+$/

19.字符串是否含有双字节字 /[^/x00-/xff]+/

20.email地址 /^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$/

或者 /w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*/

21.url地址 /^[a-zA-z]+://(/w+(-/w+))(/.(/w+(-/w+)))(/?/S)?$/

或者 /http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?/

22.匹配中文字符的正则 /[u4e00-u9fa5]/

23.匹配双字节字符(包括汉字在内) /[^x00-xff]/

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

1
2
3
4
5
6

String.prototype.len=function(){

return this.replace([^x00-xff]/g,”aa”).length;

}

24.匹配空行的正则 /n[s| ]*r/

25.匹配HTML标记的正则 /<(.)>.</1>|<(.*) />/

26.匹配首尾空格的正则 /(^s*)|(s*$)/

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

1
2
3
4
5
String.prototype.trim = function(){

return this.replace(/(^s*)|(s*$)/g, “”);

}

27.匹配IP地址的正则 /(d+).(d+).(d+).(d+)/

应用:利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function IP2V(ip){

re=/(d+).(d+).(d+).(d+)/g;

if(re.test(ip)){

return RegExp.$1*Math.pow(255,3))+

RegExp.$2*Math.pow(255,2))+

RegExp.$3*255+RegExp.$4*1;

}

else{

throw new Error(“Not a valid IP address!”);

}

}

其实直接用split函数来分解可能更简单,程序如下:

1
2
3
4
5
var ip=”10.100.20.168″;

ip=ip.split(“.”);

alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1));

28.去除字串中重复的字符的javascript程序

1
2
3
4
5
6
7
8
9
var s=”abacabefgeeii”;

var s1=s.replace(/(.).*1/g,”$1″);

var re=new RegExp(“["+s1+"]“,”g”);

var s2=s.replace(re,”");

alert(s1+s2); //结果为:abcefgi

/*使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,

两者串连。这个方法对于字符顺序有要求的字符串可能不适用。*/

29.用正则表达式从URL地址中提取文件名的javascript程序

1
2
3
4
5
s=”http://www.9499.net/page1.htm“;

s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″);

alert(s); //结果为page1

30.限制表单文本框输入内容

只能输入中文:

onkeyup=”value=value.replace(/[^u4E00-u9FA5]/g,”)”

onbeforepaste=”clipboardData.setData(‘text’,

clipboardData.getData(‘text’).replace(/[^u4E00-u9FA5]/g,”))”

只能输入全角字符:

onkeyup=”value=value.replace(/[^uFF00-uFFFF]/g,”)”

onbeforepaste=”clipboardData.setData(‘text’,

clipboardData.getData(‘text’).replace(/[^uFF00-uFFFF]/g,”))”

只能输入数字:

onkeyup=”value=value.replace(/[^d]/g,”)”

onbeforepaste=”clipboardData.setData(‘text’,

clipboardData.getData(‘text’).replace(/[^d]/g,”))”

只能输入数字和英文:

onkeyup=”value=value.replace(/[W]/g,”)”

onbeforepaste=”clipboardData.setData(‘text’,

clipboardData.getData(‘text’).replace(/[^d]/g,”))”

31.验证文件名由字母,数字,下滑线组成 /^((/w+)(/.{1})(/w+))$/

32.匹配日期(1900-1999)

/^19/d{2}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1])))$/

33.匹配日期(2000-2999)

/^20/d{2}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1])))$/

34.匹配日期时间

/^(1|2/d{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1]))))( (/d{2}):(/d{2}):(/d{2}))?$/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Formatter and colorer of raw JSON code</title>
<meta name="description" content="A tool to format and color raw JSON code">
<meta name="keywords" content="Json, Printer, Colorer, Format, Color">
<script>
// we need tabs as spaces and not CSS magin-left
// in order to ratain format when coping and pasing the code
window.TAB = " ";
function IsArray(obj) {
return obj &&
typeof obj === 'object' &&
typeof obj.length === 'number' &&
!(obj.propertyIsEnumerable('length'));
}
function Process(){
var json = document.getElementById("RawJson").value;
var html = "";
try{
if(json == "") json = "/"/"";
var obj = eval("["+json+"]");
html = ProcessObject(obj[0], 0, false, false, false);
document.getElementById("Canvas").innerHTML = "<PRE class='CodeContainer'>"+html+"</PRE>";
}catch(e){
alert("JSON is not well formated:/n"+e.message);
document.getElementById("Canvas").innerHTML = "";
}
}
function ProcessObject(obj, indent, addComma, isArray, isPropertyContent){
var html = "";
var comma = (addComma) ? "<span class='Comma'>,</span> " : "";
var type = typeof obj;

if(IsArray(obj)){
if(obj.length == 0){
html += GetRow(indent, "<span class='ArrayBrace'>[ ]</span>"+comma, isPropertyContent);
}else{
html += GetRow(indent, "<span class='ArrayBrace'>[</span>", isPropertyContent);
for(var i = 0; i < obj.length; i++){
html += ProcessObject(obj[i], indent + 1, i < (obj.length - 1), true, false);
}
html += GetRow(indent, "<span class='ArrayBrace'>]</span>"+comma);
}
}else if(type == 'object' && obj == null){
html += FormatLiteral("null", "", comma, indent, isArray, "Null");
}else if(type == 'object'){
var numProps = 0;
for(var prop in obj) numProps++;
if(numProps == 0){
html += GetRow(indent, "<span class='ObjectBrace'>{ }</span>"+comma, isPropertyContent);
}else{
html += GetRow(indent, "<span class='ObjectBrace'>{</span>", isPropertyContent);
var j = 0;
for(var prop in obj){
html += GetRow(indent + 1, "<span class='PropertyName'>"+prop+"</span>: "+ProcessObject(obj[prop], indent + 1, ++j < numProps, false, true));
}
html += GetRow(indent, "<span class='ObjectBrace'>}</span>"+comma);
}
}else if(type == 'number'){
html += FormatLiteral(obj, "", comma, indent, isArray, "Number");
}else if(type == 'boolean'){
html += FormatLiteral(obj, "", comma, indent, isArray, "Boolean");
}else if(type == 'function'){
obj = FormatFunction(indent, obj);
html += FormatLiteral(obj, "", comma, indent, isArray, "Function");
}else if(type == 'undefined'){
html += FormatLiteral("undefined", "", comma, indent, isArray, "Null");
}else{
html += FormatLiteral(obj, """, comma, indent, isArray, "String");
}
return html;
}
function FormatLiteral(literal, quote, comma, indent, isArray, style){
if(typeof literal == 'string')
literal = literal.split("<").join("&lt;").split(">").join("&gt;");
var str = "<span class='"+style+"'>"+quote+literal+quote+comma+"</span>";
if(isArray) str = GetRow(indent, str);
return str;
}
function FormatFunction(indent, obj){
var tabs = "";
for(var i = 0; i < indent; i++) tabs += window.TAB;
var funcStrArray = obj.toString().split("/n");
var str = "";
for(var i = 0; i < funcStrArray.length; i++){
str += ((i==0)?"":tabs) + funcStrArray[i] + "/n";
}
return str;
}
function GetRow(indent, data, isPropertyContent){
var tabs = "";
for(var i = 0; i < indent && !isPropertyContent; i++) tabs += window.TAB;
if(data != null && data.length > 0 && data.charAt(data.length-1) != "/n")
data = data+"/n";
return tabs+data;
}
</script>
<style>
.Canvas
{
font: 10pt Georgia;
background-color:#ECECEC;
color:#000000;
border:solid 1px #CECECE;
}
.ObjectBrace
{
color:#00AA00;
font-weight:bold;
}
.ArrayBrace
{
color:#0033FF;
font-weight:bold;
}
.PropertyName
{
color:#CC0000;
font-weight:bold;
}
.String
{
color:#007777;
}
.Number
{
color:#AA00AA;
}
.Boolean
{
color:#0000FF;
}
.Function
{
color:#AA6633;
text-decoration:italic;
}
.Null
{
color:#0000FF;
}
.Comma
{
color:#000000;
font-weight:bold;
}
PRE.CodeContainer{
margin-top:0px;
margin-bottom:0px;
}
</style>
</head>
<body>
<div style="float:right;font-size:11px;">Quick Json Formatter 1.0 Copyright (c) 2008 Vladimir Bodurov <a href="http://www.ttwinbug.com">http://www.ttwinbug.com</a></div>
<h3 style="margin-bottom:2px">Formatter and colorer of raw JSON code</h3>
<div>Enter your JSON here:</div>
<textarea id="RawJson" cols="100" rows="25">
</textarea><BR/>
<input type="Button" value="Format" onClick="Process()"/>
<div id="Canvas" class="Canvas"></div>
</body>
</html>

经本人整理后正确能够运行的版本, 网上好多去掉内容,或是故意写错的版本,此处代码为修正代码,复制到文本编辑器内,保存成html格式即可运行。

为了保证自己辛苦写的javascript代码不被直接copy走,很多人都想对自己的javascript代码进行加密处理
使用以下代码可以完美的进行加密处理。
直接上javascript代码



基本上实现对普通js进行压缩加密解密的过程。

为了实现网页更快速的展示,通常需要将CSS文件进行压缩整理。
根据网上一些Javascript教程,我编写了一个网页代码可以实现CSS的压缩整理,直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>样式表(CSS) 格式整理与压缩</title>
<style type="text/css">
html,body,form,fieldset,textarea { height:100%; margin:0; padding:0; border:0; font-size:10pt; background:#eee; }
form { margin:0 1%; overflow:hidden; }
legend { line-height:3em; font-weight:bolder; }
button { float:left; margin:1% 1% 0 0; cursor:pointer; }
textarea { width:100%; height:20em; border:1px solid #ccc; display:block; background:#fff; }
</style>
</head>
<body>
<form action="" onsubmit="return false"><fieldset>
<legend>样式表(CSS) 格式整理与压缩</legend>
<textarea name="" rows="" cols="" id="codeText">
body * { font-size:10pt; }/* ss sda */
p
{ clear:left; padding:5px 10px;
}
td
,
fieldset
{ padding : 10px ; }
textarea {
width:90%;
height:10em;
}
</textarea>

<button type="button" onclick="$('codeText').value=code.A();">压缩代码</button>
<button type="button" onclick="$('codeText').value=code.B();">格式(多行)</button>
<button type="button" onclick="$('codeText').value=code.C();">格式(单行)</button>
<button type="button" onclick="$('codeText').value=code.Z();">还原代码</button>
</fieldset></form>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
function codeZip(obj){
this.S=function(){
var code=obj.value;
if(!this.codeZ||this.codeZ=="")this.codeZ=code;
code=code.replace(/(\n|\t|\s)*/ig,'$1');
code=code.replace(/\n|\t|\s(\{|\}|\,|\:|\;)/ig,'$1');
code=code.replace(/(\{|\}|\,|\:|\;)\s/ig,'$1');
return code;
}
this.A=function(){
var code=this.S();
return code;
}
this.B=function(){
var code=this.S();
code=code.replace(/(\{)/ig,' $1');
code=code.replace(/(\{|\;)/ig,'$1\n\t');
code=code.replace(/\t*(\})/ig,'$1\n');
code=code.replace(/(\*\/)/ig,'$1\n');
return code;
}
this.C=function(){
var code=this.S();
code=code.replace(/(\})/ig,'$1\n');
code=code.replace(/(\*\/)/ig,'$1\n');
return code;
}
this.Z=function(){
return (this.codeZ)?this.codeZ:obj.value;
}
var my=this;
obj.onkeydown=function(){
my.codeZ="";
}
}
var code=new codeZip($('codeText'));
</script>
</body>
</html>

javascript实现的样式表(CSS) 格式整理与压缩,可以分为多行与单行,非常不错。

(function(){})()
相当于先定义 function xx(){},后调用 xx();
()是最高优先级的,所以先执行function(){},
这个定义了一个匿名函数,等于xx=function(){}
接着就是调用xx()了;
给个例子
JScript code

1
2
3
4
5
6
7
8
functionf1(a)
{
alert(a);
}
functionf2(a)
{
returnfunction(){ alert(a); }
}
阅读全文 »

1
2
3
$.getScript('xxx.js',function(){
alert('xxx.js加载成功并且已经执行了')
})

应该是jquery的监听问题,ajax成功后append进来的数据不会被原先已经定义好的函数识别。对于这种情况,我一般采用将所有jquery函数归入一个函数中,然后在ajax的success函数内部调用这个函数,以识别新增数据。示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$(document).ready(function(){
function myListener(){
$("#abc").click(function(){
//dosomething

});
$("#getData").click(function(){
$.ajax({
url: url, //url为变量
success:function(msg){
$("#feedback").append(msg);
myListener(); //监听,相当引入所有其中的函数。

}

});

});
}

});

URL即统一资源定位符 (Uniform Resource Locator, URL),完整的URL由这几个部分构成:

1
scheme://host:port/path?query#fragment

scheme:通信协议,常用的http,ftp,maito等。
host:主机,服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
port:端口号,整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
path:路径,由零或多个”/“符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
query:查询,可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用”&”符号隔开,每个参数的名和值用”=”符号隔开。
fragment:信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。(也称为锚点)
下面我们举例一个URL,然后获得它的各个组成部分。
http://www.ttwinbug.com/newsDetail.php?id=65
window.location.href
可以获得整个URL字符串(在浏览器中就是完整的地址栏)。

1
2
var test = window.location.href;
alert(test);
阅读全文 »

1、插入排序

1)算法简介
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
2)算法描述和实现
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
从第一个元素开始,该元素可以认为已经被排序;
取出下一个元素,在已经排序的元素序列中从后向前扫描;
如果该元素(已排序)大于新元素,将该元素移到下一位置;
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
将新元素插入到该位置后;
重复步骤2~5。
JavaScript代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function insertionSort(array){
if(Object.prototype.toString.call(array).slice(8,-1)==='Array'){
for(var i = 1; i<array.length; i++){
var key = array[i];
var j = i-1;
while(j>=0 && array[j] > key){
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
return array;
}else{
return 'array is not an Array!';
}
}
阅读全文 »

  1. shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined

    1
    2
    3
    var a = [1,2,3,4,5];

    var b = a.shift(); //a:[2,3,4,5] b:1
  2. unshift:将参数添加到原数组开头,并返回数组的长度

    1
    2
    3
    var a = [1,2,3,4,5];

    var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
    阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
function undulpicate(array){  
for(var i=0;i<array.length;i++) {
for(var j=i+1;j<array.length;j++) {
if(array[i]===array[j]) {
array.splice(j,1);
j--;
}
}
}
return array;
}

大家测试看看吧