/**
 * 常用正则验证规则
 */

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
    return /^(https?:|mailto:|tel:)/.test(path);
}

export function isvalidUsername(str) {
    const valid_map = ['admin', 'editor'];
    return valid_map.indexOf(str.trim()) >= 0;
}

/* 合法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);
}


/* 字母和下划线，不能以下划线开头结尾 */
export function validateCharacter(str) {
    const reg = /^(?!_)(?!.*?_$)[A-Za-z_]+$/;
    return reg.test(str);
}

/**
 * @desc  判断是否为身份证号
 * @param  {String|Number} str
 * @return {Boolean}
 */
export function isIdCard(str) {
    return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(
        str
    );
}

/**
 * @desc   校验Ip地址格式
 * @param  {String} ipvale
 * @return {Boolean}
 */
export function validIp(ipvale) {
    // var regex = /^([1-9]|[1-9]\d|1\d{2}|2[0-1]\d|22[0-3])(\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}$/;
    let regex = /^(\d{1,2}|1\d\d|2[0-1]\d|22[0-3])\.(\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 regex.test(ipvale);
}

// 验证手机号
export function validPhoneNumber(str) {
    const reg = /^(0|86|17951)?(1[3-9][0-9])[0-9]{8}$/;
    return reg.test(str);
}

/**
 * @desc   校验金额不能为负数并且最多2位小数
 * @param  {String} str
 * @return {Boolean}
 */
export function validPrice(str) {
    const reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/;
    return reg.test(str);
}

// 校验金额不能为负数并且最多2位小数(不含0)
export function validWithoutZero(str) {
    const reg = /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$/;
    return reg.test(str);
}


/**
 * @desc   验证正整数
 * @param  {String} str
 * @return {Boolean}
 */
export function validPositiveInteger(str) {
    const reg = /^[1-9][0-9]*$/;
    return reg.test(str);
}

/**
 * @desc   验证正整数含0，+0
 * @param  {String} str
 * @return {Boolean}
 */
export function validPositiveIntegerZero(str) {
    const reg = /^\+?(0|[1-9][0-9]*)$/;
    /**
     * 仅允许0和正整数
     * /^(0|\+?[1-9][0-9]*)$/
     */

    return reg.test(str);
}


// 验证0-1的小数(不包含0，1，保留小数点后2位)
export function validDecimal(str) {
    const reg = /^0\.[1-9]{0,2}$/;
    return reg.test(str);
}



/**
 * 验证用户密码 密码包含数字、英文、字符中的两种，长度6-18位
 * @param  {String} str
 * @return {Boolean}
 */
export function validPassword(str) {
    const reg = /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,18}$/;
    console.log(reg.test(str));
    return reg.test(str);
}

/**
 * 验证邮箱
 * @param  {String} str
 * @return {Boolean}
 */
export function validEmail(str) {
    const reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
    return reg.test(str);
}

/**
 * 验证中文
 */
export function validChinese(str) {
    const reg = /[\u4e00-\u9fa5]/;
    return reg.test(str);
}


/**
 * 验证中文
 */
export function validEnglish(str) {
    const reg = /^[a-zA-Z]+$/;
    return reg.test(str);
}


/**
 * 验证http(s)
 */
export function validHttps(str) {
    const reg = /(http|https):\/\/([\w.]+\/?)\S*/;
    return reg.test(str);
}


/**
 * 验证税率(0.**)
 */
export function validTax(str) {
    const reg = /(\b\d+\.\d{1,2}\b)/;
    return reg.test(str);
}