/**
 * 验证函数
 */

/**
 * 登录账号： 4-20个字符只能是字母、下划线、数字
 */
export function validUsername(str) {
  const reg = /^[\da-zA-Z_]{4,20}$/
  return reg.test(str)
}

/**
 * 登录密码： 6-32个字符只能是字母、下划线、数字
 */
export function validPassword(str) {
  const reg = /^[\da-zA-Z_]{6,32}$/
  return reg.test(str)
}

/**
 * 分机号： (4-20位数字)
 */
export function validExtension(str) {
  const reg = /^\d{4,20}$/
  return reg.test(str)
}

/* 合法uri*/
export function validateURL(textval) {
  const urlregex =
  /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

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

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

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

/* 排序编号 匹配正整数、负整数、0*/
export function validateSort(str) {
  const reg = /^(-|\+)?\d+$/
  return reg.test(str)
}

/* 手机号码： 3-12位 */
export function validateTel(str) {
  const reg = /^\d{3,12}$/
  return reg.test(str)
}

/**
 * 号段(7位数字)
 * 包含13、14、15、16、17、18、19
 * */
export function validThemRoughly(str) {
  const reg = /^(1[3456789])\d{5}$/
  return reg.test(str)
}

/* 区号(3-4位数字) */
export function validAreaCode(str) {
  const reg = /^\d{3,4}$/
  return reg.test(str)
}

/**
 * 标题
 * 2-30位，中英数字-（），+空格
 * */
export function validTitle(str) {
  const reg = /^[A-Za-z0-9\-（），+\s\u4e00-\u9fa5]{2,30}$/
  return reg.test(str)
}

/**
 * 姓名 字符只能是汉字和·•的组合
 * 2-20位包含少数名族
 * */
export function validName(str) {
  const reg = /^[\u4E00-\u9FA5\uf900-\ufa2d(·|•)s]{2,20}$/
  return reg.test(str)
}

/**
 * 判断输入的参数是否是个合格的固定电话号码。
 * 待验证的固定电话号码。
 * 国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)
 **/
export function validFax(str) {
  const reg = /^(([0\+]\d{2,3}-)?((0\d{2,3}))?(-)?)?(\d{7,8})(-(\d{3,}))?$/
  return reg.test(str)
}

/**
 * 匹配QQ号
 * 第一位1-9之间的数字，第二位0-9之间的数字，数字范围4-14个之间
 * */
export function validQQ(str) {
  const reg = /^[1-9][0-9]{4,14}$/
  return reg.test(str)
}

/**
 * @descrition:邮箱规则
 * 1.邮箱以a-z、A-Z、0-9开头，最小长度为1.
 * 2.如果左侧部分包含-、_、.则这些特殊符号的前面必须包一位数字或字母。
 * 3.@符号是必填项
 * 4.右则部分可分为两部分，第一部分为邮件提供商域名地址，第二部分为域名后缀，现已知的最短为2位。最长的为6为。
 * 5.邮件提供商域可以包含特殊字符-、_、.
 */
export function validEmail(str) {
  const reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
  return reg.test(str)
}

/**
 * 身份证号码
 * 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
 * */
export function validIdCard(str) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  return reg.test(str)
}

/**
 * id： 24个字符只能是字母、数字
 */
export function validObjectId(str) {
  const reg = /^[\da-fA-F]{24}$/
  return reg.test(str)
}
