JQuery 的一个轻量级 Guid 字符串拓展插件.

 1 (function ($) {
 2     function guid(g) {
 3         var arr = new Array(); //存放32位数值的数组
 4         if (typeof (g) == "string") { //如果构造函数的参数为字符串
 5             initializeByString(arr, g);
 6         } else {
 7             initializeByOther(arr);
 8         }
 9         //返回一个值,该值指示 Guid 的两个实例是否表示同一个值。
10         this.equals = function (o) {
11             if (o && o.isGuid()) {
12                 return this.toString() == o.toString();
13             }
14             else {
15                 return false;
16             }
17         }
18         //Guid对象的标记
19         this.isGuid = function () {
20             return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(this);
21         }
22         //返回 Guid 类的此实例值的 String 表示形式。
23         this.toString = function (format) {
24             if (typeof (format) == "string") {
25                 if (format == "N" || format == "D" || format == "B" || format == "P") {
26                     return toStringWithFormat(arr, format);
27                 } else {
28                     return toStringWithFormat(arr, "D");
29                 }
30             }
31             else {
32                 return toStringWithFormat(arr, "D");
33             }
34         }
35         //由字符串加载
36         function initializeByString(arr, g) {
37             g = g.replace(/\{|\(|\)|\}|-/g, "");
38             g = g.toLowerCase();
39             if (g.length != 32 || g.search(/[^0-9,a-f]/i) != -1) {
40                 initializeByOther(arr);
41             } else {
42                 for (var i = 0; i < g.length; i++) {
43                     arr.push(g[i]);
44                 }
45             }
46         }
47         //由其他类型加载
48         function initializeByOther(arr) {
49             var i = 32;
50             while (i--) {
51                 arr.push("0");
52             }
53         }
54         /*
55         根据所提供的格式说明符,返回此 Guid 实例值的 String 表示形式。
56         N  32 位: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
57         D  由连字符分隔的 32 位数字 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
58         B  括在大括号中、由连字符分隔的 32 位数字:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
59         P  括在圆括号中、由连字符分隔的 32 位数字:(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
60         */
61         function toStringWithFormat(arr, format) {
62             switch (format) {
63                 case "N":
64                     return arr.toString().replace(/,/g, "");
65                 case "D":
66                     var str = arr.slice(0, 8) + "-" + arr.slice(8, 12) + "-" + arr.slice(12, 16) + "-" + arr.slice(16, 20) + "-" + arr.slice(20, 32);
67                     str = str.replace(/,/g, "");
68                     return str;
69                 case "B":
70                     var str = toStringWithFormat(arr, "D");
71                     str = "{" + str + "}";
72                     return str;
73                 case "P":
74                     var str = toStringWithFormat(arr, "D");
75                     str = "(" + str + ")";
76                     return str;
77                 default:
78                     return new Guid();
79             }
80         }
81     }
82     $.extend({ guidEx: guid });
83     $.extend($.guidEx, {
84         enpty: function () {
85             return new guid();
86         },
87         newGuid: function () {
88             var g = "";
89             var i = 32;
90             while (i--) {
91                 g += Math.floor(Math.random() * 16.0).toString(16);
92             }
93             return new guid(g);
94         },
95         isGuid: function (g) {
96             return /^[0-9a-fA-F]{32}?$|^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?$/.test(g);
97         }
98     });
99 })(jQuery);

 

posted @ 2015-09-15 19:12  Allyn  阅读(989)  评论(1编辑  收藏  举报