/**
 * 验证邮箱格式是否正确
 * @param {string} s - 要验证的字符串
 * @returns {boolean} - 如果符合标准邮箱格式则返回true，否则返回false
 */
export function isEmail(s) {
  // 正则表达式用于匹配标准的电子邮件地址格式：
  // - 用户名部分只能包含字母、数字、下划线或连字符
  // - 域名部分同样只允许字母、数字、下划线或连字符
  // - 域名后缀长度为2到3个字符，并且可以有一个或两个层级（例如.com, .co.uk）
  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s);
}

/**
 * 验证手机号码格式是否正确
 * @param {string} s - 要验证的字符串
 * @returns {boolean} - 如果符合中国大陆手机号码格式则返回true，否则返回false
 */
export function isMobile(s) {
  // 正则表达式用于匹配中国大陆的手机号码：
  // - 以1开头，后面跟随10位数字
  return /^1[0-9]{10}$/.test(s);
}

/**
 * 验证电话号码格式是否正确
 * @param {string} s - 要验证的字符串
 * @returns {boolean} - 如果符合固定电话号码格式则返回true，否则返回false
 */
export function isPhone(s) {
  // 正则表达式用于匹配中国大陆的固定电话号码：
  // - 可选区号（3到4位数字），用短横线分隔
  // - 主号码由7到8位数字组成
  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s);
}

/**
 * 验证URL地址格式是否正确
 * @param {string} s - 要验证的字符串
 * @returns {boolean} - 如果符合标准URL格式则返回true，否则返回false
 */
export function isURL(s) {
  // 正则表达式用于匹配标准的URL地址：
  // - 开头必须是http:// 或 https://
  // - 后面跟任意数量的字符
  return /^http[s]?:\/\/.*/.test(s);
}

/**
 * 验证QQ号码格式是否正确
 * @param {string} s - 要验证的字符串
 * @returns {boolean} - 如果符合QQ号码格式则返回true，否则返回false
 */
export function isQq(s) {
  // 正则表达式用于匹配有效的QQ号码：
  // - QQ号码至少5位，最多15位数字
  // - 不能以0开头
  return /^[1-9][0-9]{4,14}$/.test(s);
}

/**
 * 判断字符串是否全为空格，只要有一个非空格字符即返回false
 * @param {string} str - 要验证的字符串
 * @returns {boolean} - 如果字符串全部为空格则返回true，否则返回false
 */
export function validNoEmptySpace(str) {
  const reg = /^\s+$/g; // 匹配整个字符串全是空白字符（包括空格、制表符等）的正则表达式
  return reg.test(str); // 如果字符串完全匹配上述规则，则返回true；否则返回false
}
