JavaScript常用工具函数汇总(四)

29,870次阅读
没有评论

共计 2240 个字符,预计需要花费 6 分钟才能阅读完成。

61 清除脚本内容

function stripscript(s) {return s.replace(/.*?/gi, "");
}

62 判断是否以某个字符串开头

String.prototype.startWith = function(s) {return this.indexOf(s) == 0;
};

63 时间个性化输出功能

/*
1、< 60s, 显示为“刚刚”2、>= 1min && < 60 min, 显示与当前时间差“XX 分钟前”3、>= 60min && < 1day, 显示与当前时间差“今天 XX:XX”4、>= 1day && < 1year, 显示日期“XX 月 XX 日 XX:XX”5、>= 1year, 显示具体日期“XXXX 年 XX 月 XX 日 XX:XX”*/
function timeFormat(time) {var date = new Date(time),
    curDate = new Date(),
    year = date.getFullYear(),
    month = date.getMonth() + 10,
    day = date.getDate(),
    hour = date.getHours(),
    minute = date.getMinutes(),
    curYear = curDate.getFullYear(),
    curHour = curDate.getHours(),
    timeStr;
  if (year < curYear) {timeStr = year + "年" + month + "月" + day + "日" + hour + ":" + minute;} else {
    var pastTime = curDate - date,
      pastH = pastTime / 3600000;
    if (pastH> curHour) {timeStr = month + "月" + day + "日" + hour + ":" + minute;} else if (pastH>= 1) {timeStr = "今天" + hour + ":" + minute + "分";} else {var pastM = curDate.getMinutes() - minute;
      if (pastM> 1) {timeStr = pastM + "分钟前";} else {timeStr = "刚刚";}
    }
  }
  return timeStr;
}

64 半角转换为全角函数

function toDBC(str) {
  var result = "";
  for (var i = 0; i < str.length; i++) {code = str.charCodeAt(i);
    if (code>= 33 && code <= 126) {result += String.fromCharCode(str.charCodeAt(i) + 65248);
    } else if (code == 32) {result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);
    } else {result += str.charAt(i);
    }
  }
  return result;
}

65 全角转换为半角函数

function toCDB(str) {
  var result = "";
  for (var i = 0; i < str.length; i++) {code = str.charCodeAt(i);
    if (code>= 65281 && code <= 65374) {result += String.fromCharCode(str.charCodeAt(i) - 65248);
    } else if (code == 12288) {result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
    } else {result += str.charAt(i);
    }
  }
  return result;
}

66 金额大写转换函数

function transform(tranvalue) {
  try {
    var i = 1;
    var dw2 = new Array(""," 万 "," 亿 "); // 大单位
    var dw1 = new Array("拾", "佰", "仟"); // 小单位
    var dw = new Array(
      "零",
      "壹",
      "贰",
      "叁",
      "肆",
      "伍",
      "陆",
      "柒",
      "捌",
      "玖"
    );
    // 整数部分用
    // 以下是小写转换成大写显示在合计大写的文本框中
    // 分离整数与小数
    var source = splits(tranvalue);
    var num = source[0];
    var dig = source[1];
    // 转换整数部分
    var k1 = 0; // 计小单位
    var k2 = 0; // 计大单位
    var sum = 0;
    var str = "";
    var len = source[0].length; // 整数的长度
    for (i = 1; i <= len; i++) {var n = source[0].charAt(len - i); // 取得某个位数上的数字
      var bn = 0;
      if (len - i - 1>= 0) {bn = source[0].charAt(len - i - 1); // 取得某个位数前一位上的数字
      }
      sum = sum + Number(n);
      if (sum != 0) {str = dw[Number(n)].concat(str); // 取得该数字对应的大写数字,并插入到 str 字符串的前面
        if (n == "0") sum = 0;
      }
      if (len - i - 1>= 0) {
        // 在数字范围内
        if (k1 != 3) {
          // 加小单位
          if (bn != 0) {str = dw1[k1].concat(str);
          }
          k1++;
        } else {
          // 不加小单位,加大单位
          k1 = 0;
          var temp = str.charAt(0);
          if (temp == "万" || temp == "亿")
            // 若大单位前没有数字则舍去大单位
            str = str.substr(1, str.length - 1);
          str = dw2[k2].concat(str);
          sum = 0;
        }
      }
      if (k1 == 3) {
        // 小单位到千则大单位进一
        k2++;
      }
    }
    // 转换小数部分
    var strdig = "";
    if (dig != "") {var n = dig.charAt(0);
      if (n != 0) {strdig += dw[Number(n)] + "角"; // 加数字
      }
      var n = dig.charAt(1);
      if (n != 0) {strdig += dw[Number(n)] + "分"; // 加数字
      }
    }
    str += "元" + strdig;
  } catch (e) {return "0 元";}
  return str;
}
// 拆分整数与小数
function splits(tranvalue) {var value = new Array("","");
  temp = tranvalue.split(".");
  for (var i = 0; i < temp.length; i++) {value = temp;}
  return value;
}

67 清除空格

String.prototype.trim = function() {var reExtraSpace = /^s*(.*?)s+$/;
  return this.replace(reExtraSpace, "$1");
};
// 清除左空格
function ltrim(s) {return s.replace(/^(s*| *)/, "");
}
// 清除右空格
function rtrim(s) {return s.replace(/(s*| *)$/, "");
}

68 随机数时间戳

function uniqueId() {
  var a = Math.random,
    b = parseInt;
  return (Number(new Date()).toString() + b(10 * a()) + b(10 * a()) + b(10 * a())
  );
}

69 实现 utf8 解码

function utf8_decode(str_data) {var tmp_arr = [],
    i = 0,
    ac = 0,
    c1 = 0,
    c2 = 0,
    c3 = 0;
  str_data += "";
  while (i < str_data.length) {c1 = str_data.charCodeAt(i);
    if (c1 < 128) {tmp_arr[ac++] = String.fromCharCode(c1);
      i++;
    } else if (c1> 191 && c1 <224) {c2 = str_data.charCodeAt(i + 1);
      tmp_arr[ac++] = String.fromCharCode(((c1 & 31) <<6) | (c2 & 63));
      i += 2;
    } else {c2 = str_data.charCodeAt(i + 1);
      c3 = str_data.charCodeAt(i + 2);
      tmp_arr[ac++] = String.fromCharCode(((c1 & 15) <<12) | ((c2 & 63) <<6) | (c3 & 63)
      );
      i += 3;
    }
  }
  return tmp_arr.join("");
}

以下的几个函数,用作常见的输入值校验和替换操作,主要针对中国大陆地区的校验规则:

70 校验是否为一个数字,以及该数字小数点位数是否与参数 floats 一致

校验规则:

  • 若参数 floats 有值,则校验该数字小数点后的位数。
  • 若参数 floats 没有值,则仅仅校验是否为数字。
function isNum(value,floats=null){let regexp = new RegExp(`^[1-9][0-9]*.[0-9]{${floats}}$|^0.[0-9]{${floats}}$`);
    return typeof value === 'number' && floats?regexp.test(String(value)):true;
}
function anysicIntLength(minLength,maxLength){
    let result_str = '';
    if(minLength){switch(maxLength){
            case undefined:
                result_str = result_str.concat(`{${minLength-1}}`);
                break;
            case null:
                result_str = result_str.concat(`{${minLength-1},}`);
                break;
            default:
                result_str = result_str.concat(`{${minLength-1},${maxLength-1}}`);
        }
    }else{result_str = result_str.concat('*');
    }
    return result_str;
}

71 校验是否为非零的正整数

function isInt(value,minLength=null,maxLength=undefined){if(!isNum(value)) return false;
    let regexp = new RegExp(`^-?[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);
    return regexp.test(value.toString());
}

72 校验是否为非零的正整数

function isPInt(value,minLength=null,maxLength=undefined) {if(!isNum(value)) return false;
    let regexp = new RegExp(`^[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);
    return regexp.test(value.toString());
}

73 校验是否为非零的负整数

function isNInt(value,minLength=null,maxLength=undefined){if(!isNum(value)) return false;
    let regexp = new RegExp(`^-[1-9][0-9]${anysicIntLength(minLength,maxLength)}$`);
    return regexp.test(value.toString());
}

74 校验整数是否在取值范围内

校验规则:

  • minInt 为在取值范围中最小的整数
  • maxInt 为在取值范围中最大的整数
function checkIntRange(value,minInt,maxInt=9007199254740991){return Boolean(isInt(value) && (Boolean(minInt!=undefined && minInt!=null)?value>=minInt:true) && (value<=maxInt));
}

75 校验是否为中国大陆传真或固定电话号码

function isFax(str) {return /^([0-9]{3,4})?[0-9]{7,8}$|^([0-9]{3,4}-)?[0-9]{7,8}$/.test(str);
}

76 校验是否为中国大陆手机号

function isTel(value) {return /^1[3,4,5,6,7,8,9][0-9]{9}$/.test(value.toString());
}

77 校验是否为邮箱地址

function isEmail(str) {return /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/.test(str);
}

78 校验是否为 QQ 号码

校验规则:

  • 非 0 开头的 5 位 -13 位整数
function isQQ(value) {return /^[1-9][0-9]{4,12}$/.test(value.toString());
}

79 校验是否为网址

校验规则:

  • 以 https://、http://、ftp://、rtsp://、mms:// 开头、或者没有这些开头
  • 可以没有 www 开头 (或其他二级域名),仅域名
  • 网页地址中允许出现 /%*?@& 等其他允许的符
function isURL(str) {return /^(https://|http://|ftp://|rtsp://|mms://)?[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+[/=?%-&_~`@[]':+!]*([^<>""])*$/.test(str);
}

80 校验是否为不含端口号的 IP 地址

校验规则:

IP 格式为 xxx.xxx.xxx.xxx,每一项数字取值范围为 0 -255

除 0 以外其他数字不能以 0 开头,比如 02

function isIP(str) {return /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9]).){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$/.test(str);
}

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计2240字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)