-
Notifications
You must be signed in to change notification settings - Fork 177
/
jquery.jdirk.js
3722 lines (3357 loc) · 207 KB
/
jquery.jdirk.js
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/**
* jQuery JavaScript Library v1.9.x && v2.x
* http://jquery.com/
*
* Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* jQuery Extensions Basic Library 基础函数工具包 v1.0 beta
* jquery.jdirk.js
* 二次开发 流云
* 最近更新:2014-06-26
*
* 依赖项:jquery 1.9.x/2.x late
*
* Copyright 2013-2014 ChenJianwei personal All rights reserved.
* http://www.chenjianwei.org
*/
(function (window, $, undefined) {
var version = "2014-04-24",
// 定义 字符串对象(String) 扩展对象基元
coreString = function () { return String.apply(this, arguments); },
// 定义 日期对象(Date) 扩展对象基元
coreDate = function () { return Date.apply(this, arguments); },
// 定义 数值对象(Number) 扩展对象基元
coreNumber = function () { return Number.apply(this, arguments); },
// 定义 数组对象(Array) 扩展对象基元
coreArray = function () { return Array.apply(this, arguments); },
// 定义 布尔值对象(Boolean) 扩展对象基元
coreBoolean = function () { return Boolean.apply(this, arguments); },
// 定义 通用工具方法 扩展对象基元
coreUtil = function () { return Object.apply(this, arguments); },
// 定义 空值 集合基元
coreNullable = {},
// 定义 jQuery 扩展对象基元
coreJquery = function () { return $.apply(this, arguments); },
// 定义 HTML5 工具组件对象基元
coreHtml5 = {};
coreString.fn = coreString.prototype = {};
coreDate.fn = coreDate.prototype = {};
coreNumber.fn = coreNumber.prototype = {};
coreArray.fn = coreArray.prototype = {};
coreBoolean.fn = coreBoolean.prototype = {};
coreUtil.fn = coreUtil.prototype = {};
coreJquery.fn = coreJquery.prototype = {};
coreNullable.String = new String();
coreNullable.Date = new Date();
coreNullable.Number = new Number();
coreNullable.Array = [];
coreNullable.Boolean = new Boolean();
coreNullable.Function = new Function();
coreNullable.Object = new Object();
coreJquery.string = coreString;
coreJquery.date = coreDate;
coreJquery.number = coreNumber;
coreJquery.array = coreArray;
coreJquery.boolean = coreBoolean;
coreJquery.util = coreUtil;
coreJquery.nullable = coreNullable;
coreJquery.html5 = coreHtml5;
var document = coreUtil.document = window.document,
location = coreUtil.location = window.location,
docElem = coreUtil.docElem = document.documentElement,
history = coreUtil.history = window.history,
parent = coreUtil.parent = window.parent,
top = coreUtil.top = window.top,
$$ = coreJquery.emptyJquery = coreJquery.empty$ = coreJquery.$$ = coreUtil.emptyJquery = coreUtil.empty$ = coreUtil.$$ = $(),
core_string = version,
//core_date = coreNullable.Date,
//core_number = coreNullable.Number,
core_array = coreNullable.Array,
//core_boolean = coreNullable.Boolean,
//core_trim = core_string.trim,
core_push = core_array.push,
core_slice = core_array.slice,
core_splice = core_array.splice,
//core_sort = core_array.sort,
//core_join = core_array.join,
core_isArray = Array.isArray;
// 定义版本
coreUtil.version = version;
///////////////////////////////////////////////////////////////////////////////////////////////
// javascript 工具,提供常用的 js 工具方法。
// 包括解析和判断对象的类型、url 解析等功能。
///////////////////////////////////////////////////////////////////////////////////////////////
// 获取指定对象的类型。
coreUtil.type = $.type;
// 测试对象是否是窗口(有可能是Frame)。
coreUtil.isWindow = $.isWindow;
// 测试对象是否是布尔(Boolean)类型值。
coreUtil.isBoolean = function (obj) { return coreUtil.type(obj) == "boolean"; };
// 测试对象是否是字符串(String)类型值。
coreUtil.isString = function (obj) { return coreUtil.type(obj) == "string"; };
// 测试对象是否是日期(Date)类型值。
coreUtil.isDate = function (obj) { return coreUtil.type(obj) == "date"; };
// 测试对象是否是正则表达式(RegExp)。
coreUtil.isRegExp = function (obj) { return coreUtil.type(obj) == "regexp"; };
// 测试传入的参数是否是一个 javscript 对象;
coreUtil.isObject = function (obj) { return coreUtil.type(obj) == "object"; };
// 测试对象是否是数组(Array)。
coreUtil.isArray = $.isArray;
// 测试对象是否是函数。
// 注意:在IE浏览器里,浏览器提供的函数比如'alert'还有 DOM 元素的方法比如 'getAttribute' 将不认为是函数。
coreUtil.isFunction = $.isFunction;
// 测试对象是否是数值或数值格式的字符串。
// 方法检查它的参数是否代表一个数值。如果是这样,它返回 true。否则,它返回false。该参数可以是任何类型的。
coreUtil.isNumeric = coreUtil.likeNumber = coreUtil.likeNumeric = $.isNumeric;
// 判断对象是否是数值类型;
coreUtil.isNumber = function (obj) { return coreUtil.type(obj) == "number"; };
// 测试对象是否是空对象(不包含任何属性)。
// 这个方法既检测对象本身的属性,也检测从原型继承的属性(因此没有使用hasOwnProperty)。
coreUtil.isEmptyObject = $.isEmptyObject;
// 测试对象是否为空(不包含任何属性的空对象、null、undefined、空字符串、全空格)。
// 这个方法既检测对象本身的属性,也检测从原型继承的属性(因此没有使用hasOwnProperty)。
coreUtil.isEmptyObjectOrNull = function (obj) {
switch (coreUtil.type(obj)) {
case "string":
return coreString.isNullOrWhiteSpace(obj);
case "array":
return obj.length == 0;
case "date":
return Date.parse(obj) == 0;
case "object":
return coreUtil.isEmptyObject(obj);
}
return obj == null || obj == undefined;
};
// 测试对象是否是纯粹的对象(通过 "{}" 或者 "new Object" 创建的)。
coreUtil.isPlainObject = $.isPlainObject;
// 判断对象是否为 "未定义" 值(即 undefined)。
coreUtil.isUndefined = function (obj) { return obj === undefined || typeof obj === "undefined"; };
// 判断对象是否为空(Null)值。
coreUtil.isNull = function (obj) { return obj === null; };
// 判断对象是否为 "未定义" 值(即 undefined)或空(Null)值。
coreUtil.isNullOrUndefined = function (obj) { return coreUtil.isUndefined(obj) || coreUtil.isNull(obj); };
// 测试对象不为 "未定义" 值(即 undefined)、空(Null)值、Boolean-False值、空字符串值或数字0中的任何一种。
coreUtil.isPositive = function (obj) { return obj ? true : false; };
// 判断对象是否为 "未定义" 值(即 undefined)、空(Null)值、Boolean-False值、空字符串值或数字0中的一种。
coreUtil.isNegative = function (obj) { return obj ? false : true; };
// 测试对象是否是 jQuery 对象。
coreUtil.isJqueryObject = function (obj) { return obj != null && obj != undefined && ((obj.jquery ? true : false) || obj.constructor === $$.constructor); };
// 判断对象是否是一个空的 jQuery 对象(不包含任何 DOM 元素,即 length = 0)。
coreUtil.isEmptyJquery = coreUtil.isEmptyJqueryObject = function (obj) { return coreUtil.isJqueryObject(obj) && !obj.length; };
// 定义一个空函数
coreUtil.noop = coreUtil.isFunction($.noop) ? $.noop : function () { };
// 判断传入的字符串是否为Null或者为空字符串或者全是空格。
coreUtil.trim = $.trim;
// 将一个 DOM 对象或者表达式解析为 jQuery 对象;
// 如果该对象本身就已经是一个 jQuery 对象,则直接将其返回。
coreUtil.parseJqueryObject = coreUtil.parseJquery = function (obj) { return coreUtil.isJqueryObject(obj) ? obj : $(obj); };
// 检测一个对象是否为一个数组对象或者类似于数组对(具有数组的访问方式:具有 length 属性、且具有属性名为数字的索引访问器)
// 注意:此方法传入 字符串 时执行,也会返回 true,因为 字符串 是一个字符数组。
coreUtil.likeArray = function (obj) {
if (obj == null || obj == undefined || coreUtil.isWindow(obj)) {
return false;
}
if (obj.nodeType === 1 && obj.length) {
return true;
}
var type = coreUtil.type(obj);
return type === "array" || type !== "function" && coreUtil.isNumeric(obj.length) && obj.length >= 0;
};
// 检测一个对象是否为一个数组对象或者类似于数组对(具有数组的访问方式:具有 length 属性、且具有属性名为数字的索引访问器)且不是字符串
coreUtil.likeArrayNotString = function (obj) {
return coreUtil.likeArray(obj) && !coreUtil.isString(obj);
};
// 获取当前页面 url 参数。
// 返回值:该方法返回一个数组,数组中的每个元素都是一个 JSON 对象,该 JSON 对象包含如下属性:
// name: 表示 url 参数的名称;
// value: 表示 url 参数的值;
// 也可以通过数组访问器快速访问某个特定名称的参数值,方法如:coreUtil.getRequest()["id"]。
coreUtil.getRequest = function () {
var search = location.search;
if (search.substr(0, 1) == "?") { search = search.substr(1, search.length - 1); }
var result = [];
if (search.length > 0) {
var params = search.split("&");
for (var i = 0; i < params.length; i++) {
var param = params[i];
var pos = param.indexOf("=");
var name = param.substring(0, pos);
var value = param.substr(pos + 1);
result.push({ name: name, value: value });
result[name] = value;
}
}
return result;
};
coreUtil.request = coreUtil.getRequest();
// 生成一个 Guid(全球唯一标识符) 值;该函数定义如下参数:
// format: String 类型值,一个单格式说明符,它指示如何格式化此 Guid 的值。format 参数可以是:
// "N": 返回值的格式 32 位(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
// "D": 返回值的格式 由连字符分隔的 32 位数字(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
// "B": 返回值的格式 括在大括号中、由连字符分隔的 32 位数字({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})
// "P": 返回值的格式 括在圆括号中、由连字符分隔的 32 位数字((xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx))
// 如果 format 为 null 或空字符串 (""),则使用 "D"。
// length: Number 类型值,表示返回字符串的长度;如果不定义该参数,则全部返回。
coreUtil.guid = function (format, length) {
format = coreUtil.isString(format) ? format.toLowerCase() : "d";
length = (length == null || length == undefined || !coreUtil.isNumeric(length)) ? 32 : length;
if (length > 32 || length == 0) { length = 32; }
if (length < -32) { length = -32; }
var ret = "";
for (var i = 1; i <= 32; i++) {
ret += Math.floor(Math.random() * 16.0).toString(16);
if ((i == 8) || (i == 12) || (i == 16) || (i == 20)) { ret += "-"; }
}
switch (format) {
case "n": ret = coreString.replaceAll(ret, "-", ""); break;
case "b": ret = "{" + ret + "}"; break;
case "p": ret = "(" + ret + ")"; break;
case "d": default: break;
}
return length >= 0 ? coreString.left(ret, length) : coreString.right(ret, Math.abs(length));
};
// 获取当前应用程序的完整主机地址部分,返回的结果格式如( http://127.0.0.1 )
coreUtil.getHostPath = function () {
var href = location.href;
var pathname = location.pathname;
return href.substr(0, href.lastIndexOf(pathname));
};
coreUtil.hostPath = coreUtil.getHostPath();
// 返回当前页面不带参数的完整路径。
coreUtil.currentUri = coreUtil.hostPath + location.pathname;
// 返回当前页面所在目录的完整路径。
coreUtil.currentPath = coreUtil.currentUri.substr(0, coreUtil.currentUri.lastIndexOf("/"));
// 表示当前应用程序所嵌套的虚拟目录的层数。默认为 0,表示未嵌套虚拟目录。
coreUtil.rootDegree = 0;
// 返回当前应用程序(含站点名或者虚拟目录路径)的完整根路径。
// 该方法依赖于全局参数 coreUtil.rootDegree 的值。
// coreUtil.rootDegree 该全局参数表示 虚拟目录 的层数。
// coreUtil.rootDegree 参数设置正确,该方法方能返回正确的结果。
// coreUtil.rootDegree 默认值为 0,即应用程序没有设置虚拟目录。
coreUtil.getRootPath = function () {
var result = coreUtil.hostPath;
var pathname = location.pathname;
if (pathname.indexOf("/") > -1) {
var paths = pathname.split("/");
var temps = new Array();
for (var i = 0; i < paths.length; i++) { if (paths[i].length > 0) { temps.push(paths[i]); } }
for (var i = 0; i < coreUtil.rootDegree && i < temps.length; i++) { result += "/" + temps[i]; }
}
return result;
};
coreUtil.rootPath = coreUtil.getRootPath();
// 根据传入的 uri 地址返回该 uri 相对于应用程序的完整客户端访问url地址。
// 传入的 uri 地址应为相对于应用程序根路径的完整地址。
// 该方法依赖于当前文件的 coreUtil.rootPath 属性。
coreUtil.resolveClientUrl = coreUtil.resolveUrl = function (url) {
url = String(url);
if (coreString.isNullOrEmpty(url)) { return url; }
if (coreString.isUrl(url)) { return url; }
url = coreString.replaceAll(url, "\\", "/");
while (url.substring(0, 2) == "./" || url.substring(0, 1) == "/") { url = url.substring(1, url.length); }
var tmps1 = coreUtil.rootPath.split("/");
var tmps2 = url.split("/");
while (tmps1.length > 3 && tmps2.length > 1 && tmps2[0] == "..") { tmps1.pop(); tmps2.shift(); }
while (tmps2.length > 1 && tmps2[0] == "..") { tmps2.shift(); }
return tmps1.join("/") + "/" + tmps2.join("/");
};
// 在不弹出关闭提示确认的情况下直接关闭当前浏览器窗口。
coreUtil.closeWindowNoConfirm = function () {
coreUtil.top.opener = null;
coreUtil.top.open('', '_self', '');
coreUtil.top.close();
};
// 关闭当前浏览器窗口,同 window.close。
coreUtil.closeWindow = window.close;
// 屏蔽当前页面的 HTML 源代码。
// 有 bug,不建议使用。
coreUtil.shieldSourceCode = function () {
var source = document.body.innerHTML; //获取文档的原有内容
document.open(); //打开文档
document.close(); //关闭文档
document.body.innerHTML = source; //重新写入旧内容
};
// 屏蔽当前页面的鼠标右键默认事件,而调用指定的回调函数。
// 如果回调函数为空,则点击鼠标右键没有任何反应。
coreUtil.shieldContxtMenuEvent = function (callback) {
document.oncontextmenu = function (e) {
e.preventDefault();
if (callback && coreUtil.type(callback) == "function") { callback.apply(this, arguments); }
};
};
function _loadJs(url, callback) {
var heads = document.getElementsByTagName("head");
var scripts = heads[0].getElementsByTagName("script");
var isFunc = coreUtil.isFunction(callback);
for (var i = 0; i < scripts.length; i++) {
var s = scripts[i];
if (s.src == url) { if (isFunc) { callback.call(s); } return; }
}
var done = false;
var script = document.createElement('script');
script.type = "text/javascript";
script.language = "javascript";
script.src = url;
script.onload = script.onreadystatechange = function () {
if (!done && (!script.readyState || script.readyState == "loaded" || script.readyState == "complete")) {
done = true;
script.onload = script.onreadystatechange = null;
if (isFunc) { callback.call(script); }
}
};
heads[0].appendChild(script);
}
function _loadCss(url, callback) {
var link = document.createElement('link');
link.rel = "stylesheet";
link.type = "text/css";
link.media = "screen";
link.href = url;
document.getElementsByTagName("head")[0].appendChild(link);
var isFunc = coreUtil.isFunction(callback);
if (isFunc) { callback.call(link); }
}
// 动态引入一个或多个 javascript 脚本文件至当前页面文档,并在引入成功后调用指定的回调函数。
// 参数 url 表示需要载入的 javascript 脚本路径;如果需要一次性载入多个脚本,则 url 可以是一个数组,数组中每个元素表示 javascript 脚本路径。
coreUtil.loadJs = function (url, callback) {
if (coreUtil.likeArray(url) && !coreUtil.isString(url)) {
for (var i = 0; i < url.length; i++) {
var fn = (i == url.length - 1) ? callback : null;
_loadJs(url[i], fn);
}
} else { _loadJs(url, callback); }
};
// 一次性执行某个 javascript 脚本文件,并在执行成功后调用指定的回调函数。
coreUtil.runJs = function (url, callback) {
var isFunc = coreUtil.isFunction(callback);
_loadJs(url, function () {
document.getElementsByTagName("head")[0].removeChild(this);
if (isFunc) { callback(); }
});
};
// 动态引入一个或多个 css 样式表文件至当前页面文档,并在引入成功后调用指定的回调函数。
coreUtil.loadCss = function (url, callback) {
if (coreUtil.likeArray(url) && !coreUtil.isString(url)) {
for (var i = 0; i < url.length; i++) {
var fn = (i == url.length - 1) ? callback : null;
_loadCss(url, fn);
}
} else {
_loadCss(url, callback);
}
};
// 对某个对象及其所有可见属性进行多次嵌套递归循环调用某个方法;该函数定义如下参数:
// obj: 目标对象
// call: 要被针对目标对象循环调用的方法
// times: 嵌套的层数
coreUtil.eachCall = function (obj, call, times) {
if (!coreUtil.isFunction(call)) { return; }
if (obj == undefined) { obj = coreNullable.Object; }
if (times == undefined || times < 0) { times = 1; }
if (times == 0) { return obj; }
call.call(this, obj);
for (var i = 1; i <= times; i++) { for (var key in obj) { coreUtil.eachCall.call(this, obj[key], call, times - 1); } }
};
// 阻止向对象添加新属性。
// 模拟 Object.preventExtensions 方法;
coreUtil.preventExtensions = function (obj, times) {
coreUtil.eachCall.call(this, obj, Object.preventExtensions, times);
};
// 阻止修改现有属性的特性,并阻止添加新属性。
// 模拟 Object.seal 方法;
coreUtil.seal = function (obj, times) {
coreUtil.eachCall.call(this, obj, Object.seal, times);
};
// 阻止修改现有属性的特性和值,并阻止添加新属性。
// 模拟 Object.freeze 方法;
coreUtil.freeze = function (obj, times) {
coreUtil.eachCall.call(this, obj, Object.freeze, times);
};
// 在指定的毫秒数后调用函数或计算表达式;该函数定义如下参数:
// code: 必需。要调用的函数后要执行的 JavaScript 代码串。
// millisec: 可选。在执行代码前需等待的毫秒数。
// 模拟 setTimeout/setImmediate 方法。
// 备注:如果不传入参数 millisec 或该参数值为 0,则自动调用 setImmediate(该方法相对于 setTimeout 可以有效降低浏览器资源开销) 方法;
coreUtil.exec = function (code, millisec) {
if (!code) { return; }
return !millisec && window.setImmediate ? window.setImmediate(code) : window.setTimeout(code, millisec);
};
// 以 try...catch... 方式执行指定的函数代码块;该函数提供如下重载方式:
// function (options):该重载中,参数 options 表示一个 JSON-Object.
// 格式如 { code: function|string , error: function|string , final: function|string , tryError: boolean , tryFinal: boolean }
// 其中 code 表示将被 try 块执行的函数代码块.
// error 表示在 code 执行出错时将执行的代码块.
// final 表示在 code 和 error 执行完成后将执行的代码块.
// tryError 指定 error 是否同样以 try...catch... 方式执行.
// tryFinal 指定 final 是否同样以 try...catch... 方式执行.
// function (code, error, final): 该重载将会被自动转换成 function ({ code: code, error: error, final: finall, tryError: false, tryFinal: false }) 方式执行;
// 返回值:如果 code 代码块执行成功,则返回该代码块的执行返回值;
// 否则判断 error 和 final 代码块是否具有返回值;
// 如果这两个代码块都有返回值,则取 final 的执行结果返回;
// 如果 error 和 final 两个代码块只有其中一个具有返回值,则返回那个具有返回值的代码块的执行结果。
coreUtil.tryExec = function (code, error, final) {
var defaults = {
code: null, error: null, final: null, tryError: false, tryFinal: false
};
var opts = $.extend(defaults, typeof code == "object" ? code : { code: code, error: error, final: final }), ret;
if (typeof opts.code == "string") { opts.code = coreString.toFunction(opts.code); }
if (typeof opts.error == "string") { opts.error = coreString.toFunction(opts.error); }
if (typeof opts.final == "string") { opts.final = coreString.toFunction(opts.final); }
try {
if (coreUtil.isFunction(opts.code)) {
ret = opts.code();
}
} catch (e) {
if (coreUtil.isFunction(opts.error)) {
var a = opts.tryError ? coreUtil.tryExec(opts.error) : opts.error(e);
if (a != undefined) { ret = a; }
}
} finally {
if (coreUtil.isFunction(opts.final)) {
var b = opts.tryFinal ? coreUtil.tryExec(opts.final) : opts.final();
if (b != undefined) { ret = b; }
}
}
return ret;
};
var _matched, _browser;
var _userAgentMatch = function (userAgent) {
userAgent = userAgent.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(userAgent) ||
/(webkit)[ \/]([\w.]+)/.exec(userAgent) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(userAgent) ||
/(msie) ([\w.]+)/.exec(userAgent) ||
userAgent.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(userAgent) || [];
return { browser: match[1] || "", version: match[2] || "0" };
};
_matched = _userAgentMatch(window.navigator.userAgent);
_browser = {};
if (_matched.browser) { _browser[_matched.browser] = true; _browser.version = _matched.version; }
if (_browser.chrome) { _browser.webkit = true; } else if (_browser.webkit) { _browser.safari = true; }
// 获取浏览器的名称以及版本号。
// 判断浏览器版本示例:判断浏览器是否为IE: coreUtil.browser.msie == true,判断浏览器是否为 Chrome:window.browser.chrome == true
// 判断浏览器版本号:coreUtil.browser.version,IE下可能的值为 6.0/7.0/8.0/9.0/10.0 等等。
coreUtil.browser = _browser;
// 定义默认的对象比较函数,该函数返回一个 bool 值表示传入的两个对象是否等值。
coreUtil.equalsCompare = function (item1, item2) { return item1 == item2; };
// 定义默认的数值比较函数,该函数返回一个 int 值,该返回值的意义如下:
// 如果大于 0,则表示 a > b;
// 如果小于 0,则表示 a < b;
// 如果等于 0,则表示 a == b。
coreUtil.numericCompare = function (a, b) {
if (!coreUtil.isNumeric(a) && coreString.isNumeric(a)) { a = parseFloat(a, 10); }
if (!coreUtil.isNumeric(b) && coreString.isNumeric(b)) { b = parseFloat(b, 10); }
if (a > b) { return 1; } else if (a < b) { return -1; } else { return 0; }
};
// 确认两个 javascript 对象是否等值,该函数定义如下参数:
// item1: 待比较的对象1;
// item2: 待比较的对象2,用于和对象1进行比较;
// compare: 用于比较运算的函数,该函数用于比较 item1 是否与 item2 等值;该函数返回一个 bool 值;这是一个可选参数。
// 该函数的签名应该是 function (item1, item2) { },参数 item1 表示源数组中的项、item2 表示要进行比较的项;
// 如果不定义参数 compare,则使用默认的比较运算符 "==" 进行值的匹配;
// 返回值:如果 item1 与 item2 等值,则返回 true,否则返回 false。
coreUtil.equals = function (item1, item2, compare) {
var isFunc = coreUtil.isFunction(compare);
if (!isFunc) { compare = coreUtil.equalsCompare; }
return compare.call(this, item1, item2) == true;
};
// 比较两个 javascript 对象的大小,该函数定义如下参数:
// item1: 待比较的对象1;
// item2: 待比较的对象2,用于和对象1进行比较;
// compare: 比较函数,该函数被循环调用,用于比较 array 中没两项的大小;这是一个可选参数;
// 该函数的签名为 function (a, b) { },参数 a、b 分别表示源数组中的待比较大小的项;该函数必须返回一个数值表示比较后的结果;
// 如果 a > b ,则返回一个 大于 0 的值;
// 如果 a < b ,则返回一个 小于 0 的值;
// 如果 a == b,则返回 0;
// 如果不定义该参数,则默认将 array 中的每一项当作数字来进行比较。
// 返回值:如果 item1 > item2 ,则返回一个 大于 0 的值;
// 如果 item1 < item2 ,则返回一个 小于 0 的值;
// 如果 item1 == item2,则返回 0;
coreUtil.compare = function (item1, item2, compare) {
var isFunc = coreUtil.isFunction(compare);
if (!isFunc) { compare = coreUtil.numericCompare; }
return compare.call(this, item1, item2);
};
// 过滤 JSON 对象指定名称列表的属性,并返回该 JSON 对象的一个新副本;该函数定义如下参数:
// obj: 待操作的 JSON 对象;
// propertieNames:需要从 obj 中排除或提取的属性名称,为一个数组对象,数组中的每一项都是一个 String 类型值;
// excluding: Boolean 类型值;默认为 false;
// 如果为 true 则表示从 obj 中提取列表所示的属性值;
// 如果为 false 则表示从 obj 中排除列表所示的属性值;
// 返回值:返回一个 JSON 对象,该对象为传入的 obj 提取或排除指定列表所示属性值后的一个新 JSON-Object 副本。
coreUtil.filterProperties = function (obj, propertieNames, excluding) {
propertieNames = coreUtil.likeArrayNotString(propertieNames) ? propertieNames : [];
var ret = {};
for (var k in obj) {
if (excluding ? coreArray.contains(propertieNames, k) : !coreArray.contains(propertieNames, k)) { ret[k] = obj[k]; }
}
return ret;
};
// 排除 JSON 对象指定名称列表的属性,并返回该 JSON 对象的一个新副本;该函数定义如下参数:
// obj: 待操作的 JSON 对象;
// propertieNames:需要从 obj 中排除的属性名称,为一个数组对象,数组中的每一项都是一个 String 类型值;
// 返回值:返回一个 JSON 对象,该对象包含 obj 中除 propertieNames 列表外的所有属性。
coreUtil.excludeProperties = function (obj, propertieNames) {
return coreUtil.filterProperties(obj, propertieNames, false);
};
// 提取 JSON 对象指定名称列表的属性,并返回该 JSON 对象的一个新副本;该函数定义如下参数:
// obj: 待操作的 JSON 对象;
// propertieNames:需要从 obj 中提取的属性名称,为一个数组对象,数组中的每一项都是一个 String 类型值;
// 返回值:返回一个 JSON 对象,该对象包含 obj 中 propertieNames 列表制定的所有属性。
coreUtil.extractProperties = function (obj, propertieNames) {
return coreUtil.filterProperties(obj, propertieNames, true);
};
// 扩展 $.string、$.date、$.number、$.array、$.boolean,使这些对象分别具有 String、Date、Number、Array、Boolean 对象的成员属性作为其静态属性;
$.each([
{
unit: String.prototype, prototype: coreString, methods: [
"anchor", "big", "blink", "bold", "charAt", "charCodeAt", "concat", "fixed", "fontcolor", "fontsize", "indexOf", "italics",
"lastIndexOf", "link", "localeCompare", "match", "replace", "search", "slice", "small", "split", "strike", "sub", "substr",
"substring", "sup", "toLocaleLowerCase", "toLocaleString", "toLocaleUpperCase", "toLowerCase", "toUpperCase", "toString", "trim"
]
},
{
unit: Date.prototype, prototype: coreDate, methods: [
"getDate", "getDay", "getFullYear", "getHours", "getMilliseconds", "getMinutes", "getMonth", "getSeconds", "getTime",
"getTimezoneOffset", "getUTCDate", "getUTCDay", "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes",
"getUTCMonth", "getUTCSeconds", "getVarDate", "getYear", "setDate", "setFullYear", "setHours", "setMilliseconds", "setMinutes",
"setMonth", "setSeconds", "setTime", "setUTCDate", "setUTCFullYear", "setUTCHours", "setUTCMilliseconds", "setUTCMinutes",
"setUTCMonth", "setUTCSeconds", "setYear", "toDateString", "toGMTString", "toISOString", "toJSON", "toLocaleDateString",
"toLocaleString", "toLocaleTimeString", "toString", "toTimeString", "toUTCString"
]
},
{ unit: Number.prototype, prototype: coreNumber, methods: ["toExponential", "toFixed", "toLocaleString", "toPrecision", "toString"] },
{
unit: Array.prototype, prototype: coreArray, methods: [
"concat", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "map", "pop", "push", "reduce", "reduceRight",
"reverse", "shift", "slice", "some", "sort", "splice", "toLocaleString", "toString", "unshift"
]
},
{ unit: Boolean.prototype, prototype: coreBoolean, methods: ["toString"] }
], function (i, n) {
$.each(n.methods, function (l, name) {
var method = n.unit[name], hasMethod = method && coreUtil.isFunction(method) ? true : false;
if (hasMethod && (n.prototype[name] == null || n.prototype[name] == undefined)) {
n.prototype[name] = function () {
var thisArg = arguments[0], args = $.array.removeAt(arguments, 0);
return method.apply(thisArg, args);
};
}
});
});
///////////////////////////////////////////////////////////////////////////////////////////////
// javascript 字符(串)函数功能扩充
///////////////////////////////////////////////////////////////////////////////////////////////
// 判断传入的对象是否是一个字符串。
coreString.isString = coreUtil.isString;
// 判断传入的字符串是否为Null或者为空字符串。
coreString.isNullOrEmpty = function (str) { return str === undefined || str === null || str === ""; };
coreString.prototype.isNullOrEmpty = function () { return coreString.isNullOrEmpty(this); };
// 判断传入的字符串是否为Null或者为空字符串或者全是空格。
coreString.isNullOrWhiteSpace = function (str) { return coreString.isNullOrEmpty(str) || coreString.trim(String(str)) === ""; };
coreString.prototype.isNullOrWhiteSpace = function () { return coreString.isNullOrWhiteSpace(this); };
// 判断传入的字符串是否为 HTML 代码段。
coreString.isHtmlText = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.length >= 3 && str.charAt(0) === "<" && str.charAt(str.length - 1) === ">";
};
coreString.prototype.isHtmlText = function () { return coreString.isHtmlText(this); };
// 用新字符串替换与给定字符串匹配的所有子串;该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.replaceAll = function (str, substr, replacement, ignoreCase) {
if (!substr || substr == replacement) { return str; }
//var regexp = coreUtil.isRegExp(substr) ? substr : new RegExp(String(substr), ignoreCase ? "gm" : "igm");
//return str.replace(regexp, replacement);
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var length = str.length, i = 0;
while (str.indexOf(substr) > -1 && i++ < length) { str = str.replace(substr, replacement); }
return str;
};
coreString.prototype.replaceAll = function (substr, replacement) { return coreString.replaceAll(this, substr, replacement); };
// 格式化字符串,类似于 .NET 中的 string.format 函数功能
// 使用方法:coreString.format('字符串{0}字符串{1}字符串','第一个变量','第二个变量','第三个变量', ...'第 N 个变量');
// 该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.format = function (str, arg1, arg2, arg3, argn) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var isArray = coreUtil.likeArray(arg1),
data = (isArray && !coreUtil.isString(arg1)) || coreUtil.isObject(arg1) ? arg1 : coreArray.range(arguments, 1);
if (isArray) {
for (var i = 0; i < data.length; i++) {
value = data[i] ? data[i] : "";
str = str.replace(new RegExp("\\{" + i + "}", "gm"), value);
}
} else {
for (var key in data) {
var value = proxy.call(data, key);
value = (value == null || value == undefined) ? "" : value;
str = str.replace(new RegExp("\\{" + key + "}", "gm"), value);
}
}
function proxy(key) { try { return eval("this[\"" + key + "\"]"); } catch (ex) { return ""; } }
return str;
};
coreString.prototype.format = function (arg1, arg2, arg3, argn) {
arguments = coreArray.insert(arguments, 0, this);
return coreString.format.apply(this, arguments);
};
// 获取字符串包含非 ASCII 码字符(例如中文、日文、俄文等)的 byte 字节长度。
coreString.getByteLen = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var bytelen = 0, i = 0, length = str.length, cc = document.charset;
if (!cc) { cc = "utf-8"; }
cc = cc.toLowerCase();
var s = cc == "iso-8859-1" ? 5 : 2;
for (; i < length; i++) {
bytelen += str.charCodeAt(i) > 255 ? s : 1;
}
return bytelen;
};
coreString.prototype.getByteLen = function () { return coreString.getByteLen(this); };
// 判断当前字符串对象是否包含指定的字符串内容。
coreString.contains = function (str, val) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return String(str).indexOf(val) > -1;
};
coreString.prototype.contains = function (val) { return coreString.contains(this, val); };
// 字符串反转;该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.reverse = function (str) {
var charArray = [];
str = coreString.isNullOrEmpty(str) ? "" : String(str);
for (var i = str.length - 1; i > -1; i--) { charArray.push(str[i]); }
return charArray.join("");
};
coreString.prototype.reverse = function () { return coreString.reverse(this); };
// 去除字符串左边的空格;该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.ltrim = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.replace(/(^\s*)/g, "");
};
coreString.prototype.ltrim = function () { return coreString.ltrim(this); };
// 去除字符串右边的空格;该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.rtrim = function () {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.replace(/(\s*$)/g, "");
};
coreString.prototype.rtrim = function () { return coreString.rtrim(this); };
// 去除字符串左右两边的空格;该方法将返回源字符串处理后的一个副本,而不会改变源字符串的值。
coreString.trim = coreString.trim ? coreString.trim : coreUtil.trim;
coreString.prototype.trim = function () { return coreString.trim(this); };
// 返回一个新字符串,该字符串通过在此实例中的字符左侧填充空格或指定字符来来达到指定的总长度,从而使这些字符右对齐。
coreString.padLeft = function (str, len, paddingChar) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
paddingChar = coreString.isNullOrEmpty(paddingChar) || !paddingChar.length ? " " : paddingChar;
len = coreUtil.isNumeric(len) ? len : str.length;
if (str.length < len) { for (; str.length < len; str = paddingChar + str) { } }
return str;
};
coreString.prototype.padLeft = function (len, paddingChar) { return coreString.padLeft(this, len, paddingChar); };
// 返回一个新字符串,该字符串通过在此字符串中的字符右侧填充空格或指定字符来达到指定的总长度,从而使这些字符左对齐
coreString.padRight = function (str, len, paddingChar) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
paddingChar = coreString.isNullOrEmpty(paddingChar) || !paddingChar.length ? " " : paddingChar;
len = coreUtil.isNumeric(len) ? len : str.length;
if (str.length < len) { for (; str.length < len; str += paddingChar) { } }
return str;
};
coreString.prototype.padRight = function (len, paddingChar) { return coreString.padRight(this, len, paddingChar); };
// 返回字符串中的的字符,注意从 0 开始。
coreString.mid = function (str, start, len) {
if (!start) { start = 0; }
if (!len) { len = 0; }
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.substr(start, len);
};
coreString.prototype.mid = function (start, len) { return coreString.mid(this, start, len); };
// 计算字符串的打印长度。
coreString.lengthOfPrint = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.replace(/[^\x00-\xff]/g, "**").length;
};
coreString.prototype.lengthOfPrint = function () { return coreString.lengthOfPrint(this); };
// 判断当前 String 对象是否以指定的字符串开头。
coreString.startsWith = function (str, val) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.substr(0, val.length) == val;
};
coreString.prototype.startsWith = function (val) { return coreString.startsWith(this, val); };
// 判断当前 String 对象是否以指定的字符串结尾。
coreString.endsWith = function (str, val) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return str.substr(str.length - val.length) == val;
};
coreString.prototype.endsWith = function (val) { return coreString.endsWith(this, val); };
// 截取当前字符串左边的指定长度内容。
coreString.left = function (str, len) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
if (!coreUtil.isNumeric(len)) { len = parseInt(len, 10); }
if (len < 0 || len > str.length) { len = str.length; }
return str.substr(0, len);
};
coreString.prototype.left = function (len) { return coreString.left(this, len); };
// 截取当前字符串右边的指定长度内容。
coreString.right = function (str, len) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
if (!coreUtil.isNumeric(len)) { len = parseInt(len, 10); }
if (len < 0 || len > str.length) { len = str.length; }
return str.substring(str.length - len, str.length);
};
coreString.prototype.right = function (len) { return coreString.right(this, len); };
// 截取当前字符串左边的指定字节长度内容。
coreString.leftBytes = function (str, len) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
if (!coreUtil.isNumeric(len)) { len = parseInt(len, 10); }
var length = coreString.getByteLen(str), i = 0, bytelen = 0, cc = document.charset;
if (!cc) { cc = "utf-8"; }
cc = cc.toLowerCase();
var s = cc == "iso-8859-1" ? 5 : 2;
if (len < 0 || len > length) { len = length; }
for (; i < str.length; i++) {
bytelen += str.charCodeAt(i) > 255 ? s : 1;
if (bytelen == len) { break; }
if (bytelen > len) { i--; break; }
}
return coreString.left(str, i + 1);
};
coreString.prototype.leftBytes = function (len) { return coreString.leftBytes(this, len); };
// 截取当前字符串右边的指定字节长度内容。
coreString.rightBytes = function (str, len) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
if (!coreUtil.isNumeric(len)) { len = parseInt(len, 10); }
var length = coreString.getByteLen(str), i = 0, bytelen = 0, cc = document.charset;
if (!cc) { cc = "utf-8"; }
cc = cc.toLowerCase();
var s = cc == "iso-8859-1" ? 5 : 2;
if (len < 0 || len > length) { len = length; }
for (; i < str.length; i++) {
bytelen += str.charCodeAt(str.length - 1 - i) > 255 ? s : 1;
if (bytelen == len) { break; }
if (bytelen > len) { i--; break; }
}
return coreString.right(str, i + 1);
};
coreString.prototype.rightBytes = function (len) { return coreString.rightBytes(this, len); };
// 判断当前 String 对象是否是正确的长日期格式。
coreString.isLongDate = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var r = str.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
if (r == null) { return false; }
var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6], r[7]);
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
};
coreString.prototype.isLongDate = function () { return coreString.isLongDate(this); };
// 判断当前 String 对象是否是正确的段日期格式。
coreString.isShortDate = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var r = str.replace(/(^\s*)|(\s*$)/g, "").match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if (r == null) { return false; }
var d = new Date(r[1], r[3] - 1, r[4]);
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
};
coreString.prototype.isShortDate = function () { return coreString.isShortDate(this); };
// 判断当前 String 对象是否是正确的日期格式。
coreString.isDate = function (str) {
return coreString.isLongDate(str) || coreString.isShortDate(str);
};
coreString.prototype.isDate = function () { return coreString.isDate(this); };
// 判断当前 String 对象是否是正确的电话号码格式(中国)。
coreString.isTel = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(str);
};
coreString.prototype.isTel = function () { return coreString.isTel(this); };
// 判断当前 String 对象是否是正确的手机号码格式(中国)。
coreString.isMobile = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^(13|14|15|17|18)\d{9}$/i.test(str);
};
coreString.prototype.isMobile = function () { return coreString.isMobile(this); };
// 判断当前 String 对象是否是正确的电话号码或者手机号码格式(中国)
coreString.isTelOrMobile = function (str) {
return coreString.isTel(str) || coreString.isMobile(str);
};
coreString.prototype.isTelOrMobile = function () { return coreString.isTelOrMobile(this); };
// 判断当前 String 对象是否是正确的传真号码格式
coreString.isFax = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(str);
};
coreString.prototype.isFax = function () { return coreString.isFax(this); };
// 判断当前 String 对象是否是正确的 电子邮箱地址(Email) 格式。
coreString.isEmail = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(str);
};
coreString.prototype.isEmail = function () { return coreString.isEmail(this); };
// 判断当前 String 对象是否是正确的 邮政编码(中国) 格式。
coreString.isZipCode = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^[\d]{6}$/.test(str);
};
coreString.prototype.isZipCode = function () { return coreString.isZipCode(this); };
// 判断当前 String 对象是否是否存在汉字字符。
coreString.existChinese = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
//[\u4E00-\u9FA5]為漢字﹐[\uFE30-\uFFA0]為全角符號
return !/^[\x00-\xff]*$/.test(str);
};
coreString.prototype.existChinese = function () { return coreString.existChinese(this); };
// 验证中文
coreString.isChinese = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^[\u0391-\uFFE5]+$/i.test(str);
};
coreString.prototype.isChinese = function () { return coreString.isChinese(this); };
// 验证英文
coreString.isEnglish = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^[A-Za-z]+$/i.test(str);
};
coreString.prototype.isEnglish = function () { return coreString.isEnglish(this); };
// 判断当前 String 对象是否是正确的 文件名称(路径) 格式。
coreString.isFileName = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
//return !/[\\\/\*\?\|:"<>]/g.test(str);
return !/[\\\/\*\?\|:<>]/g.test(str);
};
coreString.prototype.isFileName = function () { return coreString.isFileName(this); };
// 判断当前 String 对象是否是正确的 IPv4 地址格式。
coreString.isIPv4 = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
if (reSpaceCheck.test(str)) {
str.match(reSpaceCheck);
if (RegExp.$1 <= 255 && RegExp.$1 >= 0
&& RegExp.$2 <= 255 && RegExp.$2 >= 0
&& RegExp.$3 <= 255 && RegExp.$3 >= 0
&& RegExp.$4 <= 255 && RegExp.$4 >= 0) {
return true;
} else { return false; }
} else { return false; }
};
coreString.prototype.isIPv4 = function () { return coreString.isIPv4(this); };
// 判断当前 String 对象是否是正确的 url 格式。
coreString.isUrl = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
// var strRegex = "^((https|http|ftp|rtsp|mms)?: //)"
// + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@
// + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
// + "|" // 允许IP和DOMAIN(域名)
// + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
// + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
// + "[a-z]{2,6})" // first level domain- .com or .museum
// + "|" // 允许为本机
// + "localhost|127.0.0.1" // 允许为本机地址
// + "(:[0-9]{1,4})?" // 端口- :80
// + "((/?)|" // a slash isn't required if there is no file name
// + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var strRegex = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
var re = new RegExp(strRegex);
return re.test(str);
};
coreString.prototype.isUrl = function () { return coreString.isUrl(this); };
// 判断是否为合法的 ipv4 或者 url 格式
coreString.isUrlOrIPv4 = function (str) {
return coreString.isUrl(str) || coreString.isIP(str);
};
coreString.prototype.isUrlOrIPv4 = function () { return coreString.isUrlOrIPv4(this); };
// 判断是否为合法的货币格式
coreString.isCurrency = function (str) {
str = coreString.isNullOrEmpty(str) ? "" : String(str);
return /^\d{0,}(\.\d+)?$/i.test(str);
};
coreString.prototype.isCurrency = function () { return coreString.isCurrency(this); };
// 判断是否为合法的 QQ 号码格式