/**
 * 判断是否为空
 * @param val 待判断值
 * @returns 是否合法
 */
export const isRequired = (val: string): boolean => {
  return val !== ''
}

//
/**
 * 判断是否为整数
 * @param value
 * @returns 是否合法
 */
export const isInteger = (value: any) => {
  return Number.isInteger(Number(value))
}

/**
 * 判断是否为ip
 * @param ip 待判断
 * @returns 是否合法
 */
export const isIp = (ip: string): boolean => {
  var rep = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  return rep.test(ip)
}

/**
 * 判断端口是否合法
 * @param port 待判断端口
 * @returns 是否合法
 */
export const isPort = (port: number | string): boolean => {
  if (!isInteger(port) || port > 65535 || port < 1) {
    return false
  }
  return true
}

//
/**
 * 判断整数范围
 * @param value 待判断数值
 * @param max 最大值
 * @param min 最小值
 * @returns 是否符合数值范围
 */
export const isInRange = (value: number, max = 20, min = -10): boolean => {
  if (!isInteger(value) || value > max || min < -10) {
    return false
  }
  return true
}

/**
 * 验证小写字母
 * @param str
 * @returns
 */
export function validateLowerCase(str: string) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 验证大写字母 */
export function validateUpperCase(str: string) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 验证大小写字母 */
export function validateAlphabets(str: string) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * 验证邮箱
 * @param email
 * @returns {boolean}
 */
export function validateEmail(email: string) {
  const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return re.test(email)
}

/**
 * 验证手机号
 * @param phone
 * @returns {boolean}
 */
export function validateMobile(phone: string) {
  const re = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/
  return re.test(phone)
}

/**
 * 校验身份证号
 * @param value
 * @returns
 */
export function validateIdCardNo(value: string) {
  const re = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  return re.test(value)
}
/**
 *
 * @param value 验证电话号码
 * @returns
 */
export function validatePhone(value: string) {
  const re = /(\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/
  return re.test(value)
}

/**
 * 强类型密码验证
 */
export function validatePasswordStrong(value: string) {
  const re = /^(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)(?![0-9\\W]+$)(?![a-zA-Z\\W]+$)[0-9A-Za-z\\W]{6,18}$/
  return re.test(value)
}
/**
 * 弱类型密码验证
 */
export function validatePasswordWeak(value: string) {
  const re = /[0-9A-Za-z\\W]{6,18}$/
  return re.test(value)
}
