/*
------------------------------------------------------------------------------------------------------------
以下一組函數補充Javascript庫函數
------------------------------------------------------------------------------------------------------------
*/
// 取得字符串的實際字節長度
String.prototype.trueLength = function() {
return this.replace(/[^\x00-\xff]/g, "**").length;
}
// 截去行首的空格等字符
String.prototype.ltrim = function() {
return this.replace(/(^\s*)/g, "");
}
// 截去行尾的空格等字符
String.prototype.rtrim = function() {
return this.replace(/(\s*$)/g, "");
}
// 截去行首與行尾的空格等字符
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}
function formtrim(frm){
for (var i=0; i<frm.elements.length; i++){
var e = frm.elements[i];
if(e.type == "text")
e.value = e.value.trim();
else if(e.type == "textarea")
e.value = e.value.rtrim();
}
}
// 判斷字符串是否以另一字符串開始
String.prototype.startsWith = function(s) {
if(s==null||s==""||this.length==0||s.length>this.length)
return false;
var i = this.indexOf(s);
return i == 0;
}
// 判斷字符串是否以另一字符串結束
String.prototype.endsWith = function(s) {
if(s==null||s==""||this.length==0||s.length>this.length)
return false;
if(this.substring(this.length-s.length)==s)
return true;
else
return false;
return true;
}
Number.prototype.toFixedHead = function(fractionDigits) {
var s = this.toString();
while (s.length < fractionDigits)
s = "0" + s;
return s;
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於Cookie操作
------------------------------------------------------------------------------------------------------------
*/
function setCookie(name,value) {
var today = new Date();
var expires = new Date();
expires.setTime(today.getTime() + 1000*60*60*24*365);
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString();
}
function getCookie(Name) {
var search = Name + "=";
if(document.cookie.length > 0) {
offset = document.cookie.indexOf(search);
if(offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if(end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(offset, end));
}
else return('');
}
else return('');
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於界面操作
------------------------------------------------------------------------------------------------------------
*/
function showobj(obj)
{
obj.style.visibility="visible";
obj.style.position="relative";
}
function hideobj(obj)
{
obj.style.visibility="hidden";
obj.style.position="absolute";
}
function checkAll(name, checked) {
var i;
var arr = document.getElementsByName(name);
for (i = 0; i < arr.length; i++) {
arr[i].checked = checked;
}
}
function selectAll() {
checkAll("select", true);
}
// 此函數用於選定有指定值的單選按鈕
function selectButton(name, value) {
var arr = document.getElementsByName(name);
for (i = 0; i < arr.length; i++) {
arr[i].checked = arr[i].value == value;
}
}
// 此函數用於選定有多個值的核選按鈕
function selectButtons(name, commaValues) {
var listArray = commaValues.split(",");
var arr = document.getElementsByName(name);
for (var i = 0; i < arr.length; i++)
arr[i].checked = false;
for (var i = 0; i < arr.length; i++)
for (var j = 0; j < listArray.length; j++){
if (arr[i].value == listArray[j])
arr[i].checked = true;
}
}
// 此函數用於統計已選定的核選按鈕
function statSelectedButton(name) {
var c = 0;
var arr = document.getElementsByName(name);
if (arr != null)
for (i = 0; i < arr.length; i++) {
if (arr[i].checked)
c++;
}
return c;
}
// 此函數用於以數組的形式返回已選定的核選按鈕的多個值
// 沒有選中的按鈕則返回空數組
function getButtonValues(name) {
var res_arr = [];
var arr = document.getElementsByName(name);
if (arr != null)
for (var i = 0; i < arr.length; i++) {
if (arr[i].checked)
res_arr[res_arr.length] = arr[i].value;
}
return res_arr;
}
// 此函數用於多值選擇表單中選中給定的多個值
function setSelectValues(selobj, commaValues) {
var listArray = commaValues.split(",");
for (var i = 0; i < selobj.options.length; i++)
for (var j = 0; j < listArray.length; j++)
if (selobj.options[i].value == listArray[j])
selobj.options[i].selected = true;
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於日期計算
------------------------------------------------------------------------------------------------------------
*/
// 函數名:DateToStr
// 功能介紹:日期格式的日期轉換成字符串(年-月-日格式)
// 參數說明:dDate - 日期格式的日期
function DateToStr(dDate) {
return dDate.getFullYear() + "-" + (dDate.getMonth() + 1) + "-" + dDate.getDate();
}
function DateToFullStr(dDate) {
return dDate.getFullYear().toFixedHead(4) + "-" + (dDate.getMonth() + 1).toFixedHead(2) + "-" + dDate.getDate().toFixedHead(2);
}
function DateTimeToStr(dDate) {
return dDate.getFullYear() + "-" + (dDate.getMonth() + 1) + "-" + dDate.getDate() + " " +
dDate.getHours() + ":" + dDate.getMinutes() + ":" + dDate.getSeconds();
}
// 函數名:StrToDate
// 功能介紹:字符串(年-月-日)格式的日期轉換成日期格式
// 參數說明:sDate - 字符串格式的日期
function StrToDate(sDate) {
aDate = sDate.split("-");
return new Date(aDate[1] + '/' + aDate[2] + '/' + aDate[0]); //轉換爲月-日-年格式
}
// 函數名:StrToDateTime
// 功能介紹:字符串(年-月-日)格式的日期轉換成日期格式
// 參數說明:sDate - 字符串格式的日期
function StrToDateTime(sDateTime) {
aDate = sDate.split(" ");
bDate = aDate[0];
cDate = bDate.split("-");
return new Date(cDate[1] + '/' + cDate[2] + '/' + cDate[0] + ' ' + aDate[1]); //轉換爲月-日-年格式
}
// 函數名:Today
// 功能介紹:取得今天的日期,格式爲字符串(年-月-日)
function Today() {
return DateToStr(new Date());
}
// 函數名:FirstDayOfMonth
// 功能介紹:取得日期所屬月份第一天的日期,結果爲日期型
function FirstDayOfMonth(dDate) {
var y = dDate.getFullYear();
var m = dDate.getMonth() + 1;
return new Date(m + "/01/" + y);
}
// 函數名:FirstDayOfLastMonth
// 功能介紹:取得日期上一個月份第一天的日期,結果爲日期型
function FirstDayOfLastMonth(dDate) {
var y = dDate.getFullYear();
var m = dDate.getMonth();
return new Date(m + "/01/" + y);
}
// 函數名:DateDiff
// 功能介紹:計算天數差的函數
// 參數說明:sDate1 - 字符串格式的日期1,年-月-日格式
// sDate2 - 字符串格式的日期2,年-月-日格式
function DateDiff(sDate1, sDate2){
var oDate1, oDate2, iDays;
oDate1 = StrToDate(sDate1);
oDate2 = StrToDate(sDate2);
iDays = parseInt((oDate1 - oDate2) / (1000 * 60 * 60 * 24)); //把相差的毫秒數轉換爲天數
return iDays;
}
//函數名:ChkDate
//功能介紹:檢查是否爲日期
//參數說明:sDate - 要檢查的字符串,年-月-日格式
function ChkDate(sDate) {
var oDate = StrToDate(sDate)
return (oDate != "NaN");
}
// 函數名:DateAdd
// 功能介紹:日期加若干天(可以爲負)
// 參數說明:sDate - 字符串格式的日期,年-月-日格式
// iDays - 整數形式的日期數
function DateAdd(sDate, iDays) {
var oDate = StrToDate(sDate)
var ms = oDate.valueOf();
oDate = new Date(ms + iDays * 1000 * 60 * 60 * 24);
return DateToStr(oDate);
}
// 函數名:ChkHour
// 功能介紹:檢查含小時的日期格式是否正確
// 參數說明:sHour - 要檢查的字符串,年-月-日 時格式
function ChkHour(sHour) {
var a = sHour.split(" ");
return a.length = 2 && ChkDate(a[0]) && a[1] >= 0 && a[1] <= 23;
}
// 函數名:ChkDateTime
// 功能介紹:檢查可能含時、分、秒的日期格式是否正確
// 參數說明:sDateTime - 要檢查的字符串,年-月-日 時:分:秒格式
function ChkDateTime(sDateTime) {
var a = sDateTime.split(" ");
if (a.length > 2)
return false;
var r = ChkDate(a[0]);
if (!r)
return false;
if (a.length = 2) {
var b = a[1].split(":");
if (b.length > 3)
return false;
if (b.length >= 1) {
for (var c = 0; c < b.length; c++)
if (isNaN(Number(b[c])))
return false;
var d = parseInt(b[0]);
if (d < 0 || d > 23)
return false;
}
if (b.length >= 2) {
var d = parseInt(b[1]);
if (d < 0 || d > 59)
return false;
}
if (b.length >= 3) {
var d = parseInt(b[2]);
if (d < 0 || d > 59)
return false;
}
}
return true;
}
function HourToStr(dHour) {
var y = dHour.getFullYear();
var m = dHour.getMonth() + 1;
var d = dHour.getDate();
var h = dHour.getHours();
return y.toFixedHead(4) + "-" + m.toFixedHead(2) + "-" + d.toFixedHead(2) + " " + h.toFixedHead(2);
}
function CheckAge(field, fieldname, errmsg, curdates, min_age, max_age) {
var birdate = StrToDate(field.value);
var curdate = StrToDate(curdates);
if(birdate == "NaN" ){
if (errmsg == "") field.focus();
errmsg += fieldname + ":不是有效的日期格式;\n";
}
else{
var age;
field.value = DateToFullStr(birdate);
if( curdate.getMonth() > birdate.getMonth() || curdate.getMonth() == birdate.getMonth() && curdate.getDate() >= birdate.getDate() ){
age = curdate.getFullYear() - birdate.getFullYear();
}
else{
age = curdate.getFullYear() - birdate.getFullYear() - 1;
}
if(age < min_age || age > max_age ){
if (errmsg == "") field.focus();
errmsg += fieldname + ":年齡必須在 " + min_age + " - " + max_age + " 之間;\n";
}
}
return errmsg;
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於網頁上檢查輸入內容
------------------------------------------------------------------------------------------------------------
*/
// 檢查單選按鈕是否選取
function CheckRadio(obj, objname, errmsg) {
for (i = 0; i < obj.length; i++) {
if(obj[i].checked) return errmsg;
}
if (errmsg == "") obj[0].focus();
errmsg += objname + ":請選擇其中一項;\n";
return errmsg;
}
//檢查複選框選取個數
function CheckRadios(field, title, msg, min, max){
var sel = 0;
for (var i=0; i<field.length; i++) {
if(field[i].checked) sel++;
}
if (sel < min) {
if (msg == "") field[0].focus();
msg += title + ":選擇了" + sel + "項,至少選擇" + min + "項;\n";
}
else
if (sel > max) {
if (msg == "") field[0].focus();
msg += title + ":選擇了" + sel + "項,最多選擇" + max + "項;\n";
}
return msg;
}
// 檢查是否爲空
function CheckNull(obj, objname, errmsg) {
if (obj.value.trim() == ""){
if (errmsg == "")
try{
obj.focus();
}
catch(e){
}
errmsg += objname + ":未輸入;\n";
}
return errmsg;
}
// 檢查是否相等
function CheckEqual(obj, obj2, obj2name, errmsg) {
if (obj.value != obj2.value) {
if (errmsg == "")
obj2.focus();
errmsg += obj2name + ":不相等;\n";
}
return errmsg;
}
// 檢查日期是否合法
function CheckDay(obj, objname, errmsg) {
var objv = obj.value.trim();
if (objv != "") {
if (!ChkDate(obj.value)) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":請按“年-月-日”的格式輸入;\n";
}
else {
obj.value = DateToFullStr(StrToDate(obj.value)); // 把不規整的日期規整,例如2005-9-31變成2005-10-1
}
}
return errmsg;
}
// 檢查日期是否合法
function CheckDayTime(obj, objname, errmsg) {
var objv = obj.value.trim();
if (objv != "") {
if (!ChkDateTime(obj.value)) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":請按“年-月-日 時:分:秒”的格式輸入;\n";
}
else {
obj.value = DateTimeToStr(StrToDateTime(obj.value)); // 把不規整的日期規整,例如2005-9-31變成2005-10-1
}
}
return errmsg;
}
// 檢查整數或浮點類型是否有效,且是否在指定範圍內
function CheckNumRange(obj, objname, errmsg, min_value, max_value) {
var objv = obj.value.trim();
if (objv != "") {
var n = Number(objv);
var s = String(n);
if (s == "NaN") {
if (errmsg == "")
obj.focus();
errmsg += objname + ":不是有效的數字格式;\n";
}
else
if (n < min_value) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":最小值爲" + min_value + ";\n";
}
else
if (n > max_value) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":最大值爲" + max_value + ";\n";
}
}
return errmsg;
}
// 檢查地區到小類
function CheckDetailRegion(obj, objname, errmsg) {
var objv = obj.value.trim();
if (objv != "") {
if (objv == "010000" || (objv > "51" && objv < "61" && objv.endsWith("0000"))){
if (errmsg == "")
obj.focus();
errmsg += objname + ":請輸入到具體的城市;\n";
}
else if (objv == "010100" || objv == "010500"){
if (errmsg == "")
obj.focus();
errmsg += objname + ":請輸入到具體的區縣;\n";
}
}
return errmsg;
}
// 檢查字符串是否符合正則表達式
function CheckExpression(obj, objname, errmsg, expression, err) {
var objv = obj.value.trim();
if (objv != "") {
var flag = expression.test(objv);
if(!flag) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":" + err + ";\n";
}
}
return errmsg;
}
// 檢查字符串是否符合正則表達式(禁止!)
function CheckAntiExpression(obj, objname, errmsg, expression, err) {
var objv = obj.value.trim();
if (objv != "") {
var flag = expression.test(objv);
if(flag) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":" + err + ";\n";
}
}
return errmsg;
}
// 檢查身份證件號碼
function CheckId(obj, objname, errmsg) {
var expression = /^[a-zA-Z0-9]{5,18}$/;
return CheckExpression(obj, objname, errmsg, expression, "要求爲5-18個數字或字母");
}
// 檢查郵政編碼
function CheckZip(obj, objname, errmsg) {
var expression = /^[0-9]{6}$/;
return CheckExpression(obj, objname, errmsg, expression, "要求爲6個數字");
}
// 檢查電子郵件
function CheckEmail(obj, objname, errmsg) {
var expression = /^\w+([-+.]+\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}
// 檢查網址,未成功
function CheckURL(obj, objname, errmsg) {
var expression = /^(http:\/\/)*(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/;
// 所有協議爲 /^([a-zA-z]+:\/\/)*(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/
return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}
// 檢查字符串長度
function CheckSLen(obj, objname, errmsg, min_len, max_len) {
var objv = obj.value;
if (objv != "") {
var l = objv.trueLength();
if (l < min_len) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":目前輸入了" + l + "個字符,最少應有" + min_len + "個字符;\n";
}
else
if (l > max_len) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":目前輸入了" + l + "個字符,最多不應超過" + max_len + "個字符;\n";
}
}
return errmsg;
}
// 檢查Unicode字符串長度
function CheckUSLen(obj, objname, errmsg, min_len, max_len) {
var objv = obj.value;
if (objv != "") {
var l = objv.length;
if (l < min_len) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":目前輸入了" + l + "個字符,最少應有" + min_len + "個字符;\n";
}
else
if (l > max_len) {
if (errmsg == "")
obj.focus();
errmsg += objname + ":目前輸入了" + l + "個字符,最多不應超過" + max_len + "個字符;\n";
}
}
return errmsg;
}
// 檢查電話號碼是否正確
function CheckTel(obj, objname, errmsg) {
var expression = /^[\d\-]{7,}$/;
return CheckExpression(obj, objname, errmsg, expression, "格式不正確");
}
// 檢查是否存在電話號碼(禁止)
function CheckAntiTel(obj, objname, errmsg) {
var expression = /([0-9\ \_\--0123456789]){8,}/;
return CheckAntiExpression(obj, objname, errmsg, expression, "內容中含有電話號碼");
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於界面上修整數據
------------------------------------------------------------------------------------------------------------
*/
// 將FORM中所有輸入框的首尾空格去掉
function trimfrm(frm){
for (var i=0; i<frm.elements.length; i++){
var e = frm.elements[i];
if(e.type=="text")
e.value = e.value.trim();
else if(e.type=="textarea")
// 大文本只修整右邊空格
e.value = e.value.rtrim();
}
}
/*
------------------------------------------------------------------------------------------------------------
以下一組函數用於通用的數據處理
------------------------------------------------------------------------------------------------------------
*/
// 將源數組中的元素用字典數組中的數據對來替換(翻譯), 結果數組中不剔除重複元素
// 例: transValues([1,2,3], [[1, a], [2, b], [3, c]]) 返回[a, b, c]
function transValues(source_arr, dict_arr) {
var res_arr = [];
if (source_arr != null && dict_arr != null) {
for (var i = 0; i < source_arr.length; i++)
for (var j = 0; j < dict_arr.length; j++)
if (source_arr[i] == dict_arr[j][0]) {
res_arr[res_arr.length] = dict_arr[j][1];
break;
}
}
return res_arr;
}
//此函數用於初始表單Radio元素
function initRadio (frm, name, value) {
for (var i=0; i<frm.elements.length; i++){
var e = frm.elements[i];
if(e.type == "radio" && e.name == name && e.value == value) e.checked = true;
}
}
//此函數用於初始表單CheckBox元素
function initCheckBox(frm, name, value) {
var arr = value.split(",");
for (var i=0; i<frm.elements.length; i++){
var e = frm.elements[i];
if(e.type == "checkbox" && e.name == name){
e.checked = false;
for(var j=0; j<arr.length; j++){
if(e.value == arr[j]) e.checked = true;
break;
}
}
}
}
//檢查是否英文字符串
function isEnglish(str){
var pat = /[\u4E00-\u9FA5]/;
return str == null ? false : !pat.test(str);
}