var myNAME=1,myEMAIL=2,myTEXT=3,myVPN=4,myMAC=5,myIP=6,myMASK=7,myNumber=8,myString=9,myDomain=10,myNAME2=11,myNAME3=12,myURL=13,mySubnet=14,myIPV6=15,myPwd=16,myStrictPwd=17,myTEXT1=18; var Ret_Pass=0; var Ret_Empty=1,Ret_Space=2,Ret_Limited=3,Ret_First_Limited=4,Ret_Invalid=5,Ret_Double_Exist=6,Ret_Zero=7; var HOST_IP=0, BROADCAST_IP=1; function check_value(myElement, checkType) { var Chk_Result = Ret_Pass; var value_flag = 0; var myValue = ''; myElement = myElement.toLowerCase(); VALUE_RULES = /^document\..*\..*/g; if (myElement != "document" && myElement.match(VALUE_RULES)) { value_flag = 0; myValue = eval(myElement+'.value'); } else { value_flag = 1; myValue = myElement; } if (myValue.length == 0) Chk_Result = Ret_Empty; else { switch (checkType) { case myNAME : if (myValue.charAt(0) == "-") return Ret_First_Limited; for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) < "-") || ((myValue.charAt(i) > "-") && (myValue.charAt(i) < "0")) || ((myValue.charAt(i) > "9") && (myValue.charAt(i) < "A")) || ((myValue.charAt(i) > "Z") && (myValue.charAt(i) < "_")) || ((myValue.charAt(i) > "_") && (myValue.charAt(i) < "a")) || (myValue.charAt(i) > "z")) { if (myValue.charAt(i) == ".") continue; Chk_Result = Ret_Limited; break; } } break; case myNAME2 : for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) < "0") || ((myValue.charAt(i) > "9") && (myValue.charAt(i) < "A")) || ((myValue.charAt(i) > "Z") && (myValue.charAt(i) < "_")) || ((myValue.charAt(i) > "_") && (myValue.charAt(i) < "a")) || (myValue.charAt(i) > "z")) { Chk_Result = Ret_Limited; break; } } break; case myNAME3 : for (var space_count = 0, i = 0; i < myValue.length; i++) { if (myValue.charAt(i) == unescape('%20')) space_count++; } if (space_count == myValue.length) return Ret_Space; break; case myEMAIL : // var EMAIL_RULES = "^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]$"; // var EMAIL_RULES = "/.+@.+\..+/"; var at_count = 0; for (var i = 0, dot_count = 0; i < myValue.length; i++) { if (myValue.charAt(i) == unescape('%20')) { Chk_Result = Ret_Space; break; } if (myValue.charAt(i) == "@") { at_count++; if (at_count > 1) { Chk_Result = Ret_Invalid; break; } } if (myValue.charAt(i) == ".") dot_count++; if ((myValue.charAt(i) < "-") || ((myValue.charAt(i) > ".") && (myValue.charAt(i) < "0")) || ((myValue.charAt(i) > "9") && (myValue.charAt(i) < "@")) || ((myValue.charAt(i) > "Z") && (myValue.charAt(i) < "_")) || ((myValue.charAt(i) > "_") && (myValue.charAt(i) < "a")) || (myValue.charAt(i) > "z")) { Chk_Result = Ret_Invalid; break; } } if ((dot_count == 0) || (at_count == 0) || ((eval(myValue.length) - at_count) < 3)) return Ret_Invalid; break; case myTEXT : for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) == unescape('%20')) || (myValue.charAt(i) == unescape('%22')) || (myValue.charAt(i) == unescape('%27')) || (myValue.charAt(i) == unescape('%3C')) || (myValue.charAt(i) == unescape('%3E')) || (myValue.charAt(i) == unescape('%5C'))) { Chk_Result = Ret_Limited; break; } } break; case myTEXT1 : for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) == unescape('%22')) || (myValue.charAt(i) == unescape('%27')) || (myValue.charAt(i) == unescape('%3C')) || (myValue.charAt(i) == unescape('%3E')) || (myValue.charAt(i) == unescape('%5C'))) { Chk_Result = Ret_Limited; break; } } break; case myNumber : for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) > "9") || (myValue.charAt(i) < "0")) { Chk_Result = Ret_Invalid; break; } } break; case myString : if (myValue.search("[<>/\"']") >= 0 || myValue.search(/\\/) >= 0) Chk_Result = Ret_Invalid; break; case myVPN : if ((myValue.charAt(0) == "-") || ((myValue.charAt(0) >= "0") && (myValue.charAt(0) <= "9"))) return Ret_First_Limited; for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) < "-") || ((myValue.charAt(i) > "-") && (myValue.charAt(i) < "0")) || ((myValue.charAt(i) > "0") && (myValue.charAt(i) < "9")) || ((myValue.charAt(i) > "9") && (myValue.charAt(i) < "A")) || ((myValue.charAt(i) > "Z") && (myValue.charAt(i) < "_")) || ((myValue.charAt(i) > "_") && (myValue.charAt(i) < "a")) || (myValue.charAt(i) > "z")) { Chk_Result = Ret_Limited; break; } } break; case myMAC : var MAC_RULES = /^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$/g; if (myValue.match(MAC_RULES)) { var value1 = 0, value2 = 0, mac = myValue.split(":"); var is_zero = new Boolean(), is_multicast = new Boolean(), is_brodacast = new Boolean(); is_multicast = (parseInt(mac[0],16) & 0x01) ? true : false; for (var i in mac) { value1 |= parseInt(mac[i], 16); is_zero = (value1 == 0) ? true : false; if (is_zero == false) break; } for (var i in mac) { value2 &= parseInt(mac[i], 16); is_brodacast = (value2 == 0xFF) ? true : false; if (is_brodacast == false) break; } // if (is_zero || is_brodacast || is_multicast) if (is_zero) Chk_Result = Ret_Invalid; } else Chk_Result = Ret_Invalid; break; case myIP : var IP_RULES = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/g if (!myValue.match(IP_RULES)) Chk_Result = Ret_Invalid; break; case myMASK : var MASK_RULES = /^(((255|254|252|248|240|224|192|128)\.0\.0\.0)|(255\.(255|254|252|248|240|224|192|128)\.0\.0)|(255\.255\.(255|254|252|248|240|224|192|128)\.0)|(255\.255\.255\.(255|254|252|248|240|224|192|128)))$/g if (!myValue.match(MASK_RULES)) Chk_Result = Ret_Invalid; break; case myIPV6: var IPV6_RULES = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/g; if (!myValue.match(IPV6_RULES)) Chk_Result = Ret_Invalid; break; case mySubnet: if (isNaN(myValue) || (parseInt(myValue, 10) < 0) || (parseInt(myValue, 10) > 128)) Chk_Result = Ret_Invalid; break; case myDomain : for (var i = 0; i < myValue.length; i++) { if (!(((myValue.charAt(i) >= "0") && (myValue.charAt(i) <= "9")) || ((myValue.charAt(i) >= "A") && (myValue.charAt(i) <= "Z")) || ((myValue.charAt(i) >= "a") && (myValue.charAt(i) <= "z")))) { if (!((i == 0) || (i == (myValue.length - 1)))) { if ((myValue.charAt(i) == "-") || (myValue.charAt(i) == ".")) continue; else { Chk_Result = Ret_Limited; break; } } else { Chk_Result = Ret_First_Limited; break; } } } break; case myURL : for (var i = 0; i < myValue.length; i++) { if (myValue.charAt(i) == "#" || myValue.charAt(i) == " " || myValue.charAt(i) == "\""){ Chk_Result = Ret_Invalid; break; } } break; case myPwd: for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) < "!") || (myValue.charAt(i) > "~")) { Chk_Result = Ret_Space; break; } } break; case myStrictPwd: for (var i = 0; i < myValue.length; i++) { if ((myValue.charAt(i) < "!") || (myValue.charAt(i) > "~")) { Chk_Result = Ret_Space; break; } } if (Chk_Result == Ret_Pass) { if (myValue.length < 8) { Chk_Result = Ret_Limited; } else { var symbol = 0, alphabet = 0; for (var i = 0; i < myValue.length; i++) { if (((myValue.charAt(i) >= "A") && (myValue.charAt(i) <= "Z")) || ((myValue.charAt(i) >= "a") && (myValue.charAt(i) <= "z"))) alphabet++; else if (((myValue.charAt(i) >= "!") && (myValue.charAt(i) <= "@")) || ((myValue.charAt(i) >= "[") && (myValue.charAt(i) <= "`")) || ((myValue.charAt(i) >= "{") && (myValue.charAt(i) <= "~"))) symbol++; } if ((alphabet < 4) || (symbol < 1)) Chk_Result = Ret_Limited; } } break; } } if (Chk_Result != Ret_Pass && Chk_Result != Ret_Empty && value_flag == 0) eval(myElement+ '.select()'); return Chk_Result; } function auto_mask(IP, oMASK) { var range = 0; if (IP != "") { for (var i = 0;i < IP.length;i++) { if (IP.charAt(i) == ".") { range = IP.substring(0, i); break; } } if (range < 128) oMASK.value = "255.0.0.0"; else if ((range >= 128) && (range < 192)) oMASK.value = "255.255.0.0"; else if ((range >= 192) && (range <= 255)) oMASK.value = "255.255.255.0"; } return; } function my_conv_to_radix(value, radix) { var ConvArray = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]; var num = parseInt(value, 10); var base = parseInt(radix, 10); var ret = 0, tmp = 0; var i = 0; if ((num < 1) || (base < 2) || (base > 16)) ret = "0"; else ret = ""; for (i = 1; num > 0.9; i++) { if (i > 100) { ret = null; break; } else { tmp = num; ret = ConvArray[tmp % base] + ret; num = Math.floor(tmp / base); } } return ret; } function my_mask_to_int(netmask) { var nm = netmask.split("."); var sum = 0; for (var i in nm) { var num = parseInt(nm[i], 10); var pat = 0xff00; if (isNaN(num)) return null; else { if (parseInt(nm[i], 10) == 255) sum += 8; for (var j = 0; j < 8; j++) { if (parseInt(nm[i], 10) == (pat & 0xff)) sum += j; pat = pat >> 1; } } } return sum; } function my_int_to_mask(num) { var sum = parseInt(num, 10); var nm = ""; if (isNaN(sum) || sum > 30 || sum < 0) return null; else { for (var i = 0; i < 5; i++) { var pat = 0xff00; if (i) nm += "."; if (sum >= 8) { nm += "255"; sum -= 8; } else { while (sum > 0) { pat = pat >> 1; sum--; } nm += sum; } } } return nm; } function ipinfo(ipaddr, netmask) { var info = { total:0, first:"", last:"", network:"", broadcast:"" }; var sip = ipaddr.split("."); var snm = netmask.split("."); info.total = Math.pow(2, 32 - my_mask_to_int(netmask))-2; for (var i = 0; i < sip.length; i++) { if (i) { info.first += "."; info.last += "."; info.network += "."; info.broadcast += "."; } info.network += parseInt(sip[i], 10) & parseInt(snm[i], 10); info.broadcast += parseInt(sip[i], 10) | (~parseInt(snm[i], 10)&0xff); if (i == (sip.length-1)) { info.first += (parseInt(sip[i], 10) & parseInt(snm[i], 10))+1; info.last += (parseInt(sip[i], 10) | (~parseInt(snm[i], 10)&0xff))-1; } else { info.first += parseInt(sip[i], 10) & parseInt(snm[i], 10); info.last += parseInt(sip[i], 10) | (~parseInt(snm[i], 10)&0xff); } } return info; } function get_eui64_ip(mac) { if (mac.length) { var m = mac.split(':'); var n = my_conv_to_radix(2^parseInt(m[0], 16), 16); var ipv6 = 'FE80:0000:0000:0000:'+((n.length < 2)?'0':'')+n+m[1]+':'+m[2]+'FF:FE'+m[3]+':'+m[4]+m[5]; return ipv6.toUpperCase(); } return '0000:0000:0000:0000:0000:0000:0000:0000'; }