'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

/**
 * 判断是否外部资源
 * @param {string} path
 * @returns {Boolean}
 * @example
 * ```ts
 * isExternal('http://baidu.com'); // true
 * isExternal('mailto:a@b.com'); // true
 * isExternal('tel:10086'); // true
 * isExternal('ttt'); // false
 * ```
 */
function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}
/**
 * 判断是否URL
 * @param {string} url
 * @returns {Boolean}
 * @example
 * ```ts
 * validURL('http://baidu.com'); // true
 * validURL('https://www.google.com'); // true
 * validURL('ftp://192.168.1.1'); // true
 * validURL('baidu.com'); // false
 * validURL('htp://test.com'); // false
 * validURL(''); // false
 * ```
 */
function validURL(url) {
  var reg = /^(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 reg.test(url);
}
/**
 * 判断是否小写
 * @param {string} str
 * @returns {Boolean}
 * @example
 * ```ts
 * validLowerCase('abc'); // true
 * validLowerCase('aBc'); // false
 * validLowerCase('abc123'); // false
 * validLowerCase(''); // false
 * ```
 */
function validLowerCase(str) {
  var reg = /^[a-z]+$/;
  return reg.test(str);
}
/**
 * 判断是否大写
 * @param {string} str
 * @returns {Boolean}
 * @example
 * ```ts
 * validUpperCase('ABC'); // true
 * validUpperCase('ABc'); // false
 * validUpperCase(''); // false
 * ```
 */
function validUpperCase(str) {
  var reg = /^[A-Z]+$/;
  return reg.test(str);
}
/**
 * 判断是否字母字符串
 * @param {string} str
 * @returns {Boolean}
 * @example
 * ```ts
 * validAlphabets('abcABC'); // true
 * validAlphabets('abc123'); // false
 * validAlphabets('abc def'); // false
 * ```
 */
function validAlphabets(str) {
  var reg = /^[A-Za-z]+$/;
  return reg.test(str);
}
/**
 * 判断是否合法邮箱地址
 * @param {string} email
 * @returns {Boolean}
 * @example
 * ```ts
 * validEmail('test@example.com'); // true
 * validEmail('user.name@domain.co'); // true
 * validEmail('test'); // false
 * validEmail('@example.com'); // false
 * validEmail('test@'); // false
 * ```
 */
function validEmail(email) {
  // eslint-disable-next-line no-useless-escape
  var reg = /^(([^<>()[\]\\.,;:\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 reg.test(email);
}
/**
 * 判断是否字符串
 * @param {string} str
 * @returns {Boolean}
 * @example
 * ```ts
 * isString('hello'); // true
 * isString(''); // true
 * isString(123); // false
 * isString(null); // false
 * isString(undefined); // false
 * isString([]); // false
 * ```
 */
function isString(str) {
  if (typeof str === 'string' || str instanceof String) {
    return true;
  }
  return false;
}
/**
 * 判断是否数组
 * @param {Array} arg
 * @returns {Boolean}
 * @example
 * ```ts
 * isArray([] as any); // true
 * isArray([1, 2, 3] as any); // true
 * isArray('hello'); // false
 * isArray(123 as any); // false
 * ```
 */
function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]';
  }
  return Array.isArray(arg);
}
/**
 * 判断是否合法的QQ号码
 * @param {String} qq 待检测的qq号
 * @example
 * ```ts
 * isQQNumber(777777); // true
 * isQQNumber('ddd'); // false
 * isQQNumber('1234'); // false  // 少于 5 位
 * isQQNumber('12345678901'); // false  // 超过 10 位
 * isQQNumber('01234567'); // false  // 0 开头
 * ```
 */
function isQQNumber(qq) {
  var reQQ = /^[1-9]\d{4,9}$/;
  if (!reQQ.test(qq)) {
    return false;
  }
  return true;
}
/**
 * 判断是否合法的邮箱号码
 * @param {String} email 待检测的邮箱号码
 * @example
 * ```ts
 * isEmail('test@qq.com'); // true
 * isEmail('user.name@domain.com'); // true
 * isEmail('invalid'); // false
 * isEmail(''); // false
 * ```
 */
function isEmail(email) {
  // @符号前后直接相邻不能为 .
  // eslint-disable-next-line no-useless-escape
  var reEmail = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
  if (!reEmail.test(email)) {
    return false;
  }
  return true;
}
/**
 * 判断是否合法的手机号
 * @param {String} phone 待检测的手机号
 * @example
 * ```ts
 * isMobile('13800138000'); // true
 * isMobile('19912345678'); // true
 * isMobile('12345678901'); // false  // 不是 1[3-9] 开头
 * isMobile('1380013800'); // false  // 位数不够
 * isMobile('abc'); // false
 * ```
 */
function isMobile(phone) {
  // 根据号码段的不同和前缀不同可适当修改
  var reValue = /^[1]([3-9])[0-9]{9}$/;
  if (!reValue.test(phone)) {
    return false;
  }
  return true;
}
/**
 * 判断是否合法的电话号码
 * @param {String} tel 待检测的电话号码
 * @example
 * ```ts
 * isTel('0755-1234567'); // true
 * isTel('12345678'); // true
 * isTel('123'); // false
 * isTel('abc'); // false
 * ```
 */
function isTel(tel) {
  var reValue = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/;
  if (!reValue.test(tel)) {
    return false;
  }
  return true;
}
/**
 * 判断当前操作系统是否为 Windows
 * @returns 如果是 Windows 系统返回 true，否则返回 false
 * @example
 * ```ts
 * if (isWindows()) {
 *   console.log('当前运行在 Windows 系统上');
 * }
 * ```
 */
function isWindows() {
  return /^win/.test(process.platform);
}

exports.isArray = isArray;
exports.isEmail = isEmail;
exports.isExternal = isExternal;
exports.isMobile = isMobile;
exports.isQQNumber = isQQNumber;
exports.isString = isString;
exports.isTel = isTel;
exports.isWindows = isWindows;
exports.validAlphabets = validAlphabets;
exports.validEmail = validEmail;
exports.validLowerCase = validLowerCase;
exports.validURL = validURL;
exports.validUpperCase = validUpperCase;
