Evan Wang
Evan WangFrontEnd Developer
  • Evan Wang
    Evan WangFrontEnd Developer
  • 前端相关
  • 算法题
  • 日常笔记
  • Chat With AI

Mac开发环配置
常用CSS
日常配置
常用正则
其它
JS新语法

  1. Articles
  1. More
  2. 4-常用正则.md
目录
基础验证验证函数格式化
4289 字
约 11 分钟
更新于 2026/08/20

常用正则表达式

基础验证

 
  // 邮箱验证
  email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
 
  // 手机号验证(中国大陆)
  phone: /^1[3-9]\d{9}$/,
 
  // 固定电话(中国)
  landline: /^0\d{2,3}-?\d{7,8}$/,
 
  // 身份证号(18位)
  idCard: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
 
  // 密码强度(至少8位,包含大小写字母、数字)
  strongPassword: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/,
 
  // 用户名(4-16位字母数字下划线)
  username: /^[a-zA-Z0-9_]{4,16}$/,
 
  // ========== 数字相关 ==========
 
  // 整数
  integer: /^-?\d+$/,
 
  // 正整数
  positiveInteger: /^[1-9]\d*$/,
 
  // 小数(保留1-2位)
  decimal: /^\d+(\.\d{1,2})?$/,
 
  // 金额(支持千分位)
  money: /^[1-9]\d{0,2}(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/,
 
  // 百分比
  percentage: /^(100|[1-9]?\d)(\.\d+)?%$/,
 
  // ========== URL 和网络 ==========
 
  // URL 验证
  url: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/,
 
  // IP 地址
  ipv4: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
 
  // 域名
  domain: /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
 
  // MAC 地址
  macAddress: /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/,
 
  // ========== 日期时间 ==========
 
  // 日期格式 YYYY-MM-DD
  date: /^\d{4}-\d{2}-\d{2}$/,
 
  // 时间格式 HH:MM:SS
  time: /^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/,
 
  // 日期时间格式 YYYY-MM-DD HH:MM:SS
  datetime: /^\d{4}-\d{2}-\d{2} ([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/,
 
  // ========== 文件相关 ==========
 
  // 图片文件扩展名
  imageFile: /\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i,
 
  // 视频文件扩展名
  videoFile: /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i,
 
  // 音频文件扩展名
  audioFile: /\.(mp3|wav|flac|aac|ogg|wma)$/i,
 
  // 文档文件扩展名
  documentFile: /\.(pdf|doc|docx|xls|xlsx|ppt|pptx|txt)$/i,
 
  // ========== 中文相关 ==========
 
  // 中文字符
  chinese: /^[\u4e00-\u9fa5]+$/,
 
  // 中文姓名(2-4个字符)
  chineseName: /^[\u4e00-\u9fa5]{2,4}$/,
 
  // 包含中文的字符串
  containsChinese: /[\u4e00-\u9fa5]/,
 
  // ========== HTML 和代码 ==========
 
  // HTML 标签
  htmlTag: /<[^>]+>/g,
 
  // 十六进制颜色
  hexColor: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
 
  // Base64 编码
  base64: /^[A-Za-z0-9+/]*={0,2}$/,
 
  // ========== 银行卡和支付 ==========
 
  // 银行卡号(13-19位)
  bankCard: /^[1-9]\d{12,18}$/,
 
  // 信用卡号(Visa, MasterCard, American Express)
  creditCard: /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13})$/,
 
  // ========== 特殊格式 ==========
 
  // 邮政编码(中国)
  postalCode: /^[1-9]\d{5}$/,
 
  // 车牌号(中国)
  licensePlate:
    /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-Z0-9]{4}[A-Z0-9挂学警港澳]$/,
 
  // QQ号
  qq: /^[1-9][0-9]{4,10}$/,
 
  // 微信号
  wechat: /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/,
 
  // ========== 空白和特殊字符 ==========
 
  // 空白字符
  whitespace: /^\s*$/,
 
  // 只包含字母和数字
  alphanumeric: /^[a-zA-Z0-9]+$/,
 
  // 特殊字符
  specialChars: /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/,
  

验证函数

// 邮箱验证
  isEmail: (email: string): boolean => RegexPatterns.email.test(email),
 
  // 手机号验证
  isPhone: (phone: string): boolean => RegexPatterns.phone.test(phone),
 
  // 身份证验证
  isIdCard: (idCard: string): boolean => RegexPatterns.idCard.test(idCard),
 
  // 强密码验证
  isStrongPassword: (password: string): boolean => RegexPatterns.strongPassword.test(password),
 
  // URL验证
  isUrl: (url: string): boolean => RegexPatterns.url.test(url),
 
  // 中文验证
  isChinese: (text: string): boolean => RegexPatterns.chinese.test(text),
 
  // 包含中文验证
  containsChinese: (text: string): boolean => RegexPatterns.containsChinese.test(text),
 
  // 图片文件验证
  isImageFile: (filename: string): boolean => RegexPatterns.imageFile.test(filename),
 
  // 银行卡号验证
  isBankCard: (cardNumber: string): boolean => RegexPatterns.bankCard.test(cardNumber),
 
  // 日期格式验证
  isDate: (date: string): boolean => RegexPatterns.date.test(date),

格式化

// 手机号格式化(添加空格)
  formatPhone: (phone: string): string => {
    const cleaned = phone.replace(/\D/g, "")
    return cleaned.replace(/(\d{3})(\d{4})(\d{4})/, "$1 $2 $3")
  },
 
  // 银行卡号格式化(每4位添加空格)
  formatBankCard: (cardNumber: string): string => {
    const cleaned = cardNumber.replace(/\D/g, "")
    return cleaned.replace(/(\d{4})(?=\d)/g, "$1 ")
  },
 
  // 金额格式化(添加千分位)
  formatMoney: (amount: string | number): string => {
    const num = typeof amount === "string" ? Number.parseFloat(amount) : amount
    return num.toLocaleString("zh-CN", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
  },
 
  // 身份证号脱敏
  maskIdCard: (idCard: string): string => {
    return idCard.replace(/(\d{6})\d{8}(\d{4})/, "$1********$2")
  },
 
  // 手机号脱敏
  maskPhone: (phone: string): string => {
    return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2")
  },
 
  // 邮箱脱敏
  maskEmail: (email: string): string => {
    return email.replace(/(.{2}).*(@.*)/, "$1***$2")
  },
 
  // 移除HTML标签
  removeHtmlTags: (html: string): string => {
    return html.replace(RegexPatterns.htmlTag, "")
  },
 
  // 提取数字
  extractNumbers: (text: string): string[] => {
    return text.match(/\d+/g) || []
  },
 
  // 提取中文
  extractChinese: (text: string): string[] => {
    return text.match(/[\u4e00-\u9fa5]+/g) || []
  },