
export default class StringUtil {
  /** 不区分大小写 */
  static equalsIgnoreCase(str1, str2) {
    if(this.isString(str1, str2)) {
      return str1.toLowerCase() == str2.toLowerCase()
    } else {
      return false
    }
  }

  /** 不区分大小写 忽略类型 */
  static eqlObjIgnoreCase(obj, str) {
    if(obj == null && str == null) return true
    if(obj == null && str != null) return false
    if(this.isString(str)) {
      return obj.toString().toLowerCase() == str.toLowerCase()
    } else {
      return false
    }
  }

  /** 不区分大小写 忽略类型 */
  static eqlObjIgnoreCases(obj, ...str) {
    if(str == null) return false
    for (var i = 0; i < str.length; i++) {
      if(this.eqlObjIgnoreCase(obj, str[i])){
        return true
      }
    }
    return false
  }

  /** 不区分大小写 */
  static equalsIgnoreCases() {
      if(arguments.length <= 1) return false
      for (var i = 1; i < arguments.length; i++) {
        let bool = this.equalsIgnoreCase(arguments[0], arguments[i])
        if(bool) return true
      }
      return false
  }

  /** 判断字符串是否为null或空值  true:为空；false:不为空*/
  static isNullOrEmptyTrim(str) {
    return str == null || this.trim(str).length == 0
  }

  /**去除所有空格*/
  static trimAll(str) {
    if(str == null) return str
    if(str.constructor == String) {
      return str.replace(/\s+/g,"")
    } else {
      return str
    }
  }

  /**去除两头空格*/
  static trim(str) {
    if(str == null) return str;
    if(str.constructor == String) {
      return str.replace(/^\s+|\s+$/g, "")
    } else {
      return str
    }
  }

  /** 去除左空格 */
  static trimLeft(str) {
    if(str == null) return str
    if(str.constructor == String) {
      return str.replace( /^\s*/, '')
    } else {
      return str
    }
  }

  /** 去除左空格 */
  static trimRight(str) {
    if(str == null) return str
    if(str.constructor == String) {
      return str.replace(/(\s*$)/g, "")
    } else {
      return str
    }
  }

  /** 判断对象是否是字符串 */
  static isString() {
    if(arguments.length == 0) return false
    for (var i = 0; i < arguments.length; i++) {
        let bool = Object.prototype.toString.call(arguments[i]) === "[object String]"
        if(!bool) return false
    }
    return true
  }

  /** 判断字符串中是否包含另一个字符串
   * @param  String str 原字符串
   * @param  String s   被包含的字符串
   * @return Boolean    true:包含
   */
  static contains(str, contains) {
    if(this.isString(str, contains)) {
      return str.indexOf(contains) >= 0
    } else {
      return false
    }
  }

  /** 判断字符串头部是否相同
   * @param  String str  字符串
   * @param  String start 字符串头部
   * @return Boolean
   */
  static startEquals(str, start) {
    if(this.isString(str, start)) {
      let reg = new RegExp("^" + start)
      return reg.test(str)
    } else {
      return false
    }
  }

  /** 判断字符串尾部是否相同
   * @param  String str  字符串
   * @param  String end 字符串尾部
   * @return Boolean
   */
  static endEquals(str, end) {
    if(this.isString(str, end)) {
      let reg = new RegExp(end + "$")
      return reg.test(str)
    } else {
      return false
    }
  }

  /** 判断字符串头部是否相同 不区分大小写
   * @param  String str  字符串
   * @param  String start 字符串头部
   * @return Boolean
   */
  static startEqualsIgnoreCase(str, start) {
    if(this.isString(str, start)) {
      let reg = new RegExp("^" + start.toUpperCase())
      return reg.test(str.toUpperCase())
    } else {
      return false
    }
  }

  /** 判断字符串尾部是否相同 不区分大小写
   * @param  String str  字符串
   * @param  String end 字符串尾部
   * @return Boolean
   */
  static endEqualsIgnoreCase(str, end) {
    if(this.isString(str, end)) {
      let reg = new RegExp(end.toUpperCase() + "$")
      return reg.test(str.toUpperCase())
    } else {
      return false
    }
  }

  /** 判断字符串头部是否相同 不区分大小写 请传入多个字符串，第一个参数为参照物参数
   * @return Boolean
   */
  static startEqualsIgnoreCases() {
    if(arguments.length <= 1) return false
    for (var i = 1; i < arguments.length; i++) {
      let bool = this.startEqualsIgnoreCase(arguments[0], arguments[i])
      if(bool) return true
    }
    return false
  }

  /** 判断字符串尾部是否相同 不区分大小写 请传入多个字符串，第一个参数为参照物参数
   * @return Boolean
   */
  static endEqualsIgnoreCases() {
    if(arguments.length <= 1) return false
    for (var i = 1; i < arguments.length; i++) {
      let bool = this.endEqualsIgnoreCase(arguments[0], arguments[i])
      if(bool) return true
    }
    return false
  }

  /** 替换第一个reOld*/
  static replace(str, reOld, reNew){
    if (this.isNullOrEmptyTrim(str)) return str
    return str.replace(reOld, reNew)
  }

  /** 替换所有与reOld匹配的 */
  static replaceAll(str, reOld, reNew){
    if (this.isNullOrEmptyTrim(str)) return str
    return str.replace(new RegExp(reOld, 'g'), reNew)
  }

    /**
     * 检测是否是手机号码
     * @param  {String}  phone 手机号
     * @return {Boolean}  是否是手机号
     */
    static isPhone(phone) {
      if (this.isString(phone) || phone.length == 11) {
        var reg = /^1[34578][0-9]{9}$/; //验证规则，[34578]之间不需要|
        var flag = reg.test(phone); //true
        return flag
      } else {
        return false
      }
    }

    /**
    * 字符串转成数小组
    * @param  {String}  str 要拆分的字符串
    * @param  {String}  separator 分隔符
    * @return {Array} 拆分后的字符串数小组
    */
    static split(str, separator) {
      if(this.isNullOrEmptyTrim(str)) null
      str = str + ''
      let strArr = str.split(separator);
      return strArr
    }

    /**
    * 字符串转成数小组
    * @param  {String}  str 要拆分的字符串
    * @param  {String}  separator 分隔符
    * @return {Array} 拆分后的字符串数小组
    */
    static splitTrim(str, separator) {
      let arr = this.split(str, separator)
      let retArr = []
      if(arr != null && arr.length > 0){
        for (let item of arr) {
          if(!this.isNullOrEmptyTrim(item)){
            retArr =  retArr.concat(item)
          }
        }
      }
      return retArr
    }

    /**
    * 截取字符串
    * @param  {int}  start 开始位置
    * @param  {int}  end 结束位置
    * @return {String} 截取后的字符串
    */
    static subString(str, start, end) {
      if(this.isNullOrEmptyTrim(str)) return ''
      if(start >= end || start > str.length) return ''
      if(end > str.length) end = str.length
      return str.substring(start, end)
    }

    /**
    * 截取字符串
    * @param  {int}  start 开始位置
    * @param  {String}  endStr 结束位置字符串
    * @return {String} 截取后的字符串
    */
    static subStringToEndStr(str, start, endStr) {
      if(this.isNullOrEmptyTrim(str)) return ''
      let end = str.indexOf(endStr + '')
      return this.subString(str, start, end)
    }

    /**
    * 截取字符串
    * @param  {String}  startStr 开始位置
    * @param  {int}  end 结束位置字符串
    * @return {String} 截取后的字符串
    */
    static subStringToStartStr(str, startStr, end) {
      if(this.isNullOrEmptyTrim(str)) return ''
      let start = str.indexOf(startStr + '')
      if(start < 0) return ''
      return this.subString(str, start + 1, end)
    }

    /**
    * 截取字符串
    * @param  {String}  startStr 开始位置
    * @param  {String}  endStr 结束位置字符串
    * @return {String} 截取后的字符串
    */
    static subStringtoStr(str, startStr, endStr) {
      if(this.isNullOrEmptyTrim(str)) return ''
      let start = str.indexOf(startStr + '')
      if(start < 0) return ''
      let end = str.indexOf(endStr + '')
      return this.subString(str, start + 1, end)
    }
}
