常用正则表达式

package main

import (
   "fmt"
   "regexp"
)

// IsEmail 检查邮箱地址格式是否合法
// @param email string 邮箱地址
// @return bool 检查结果
func IsEmail(email string) bool {
   pattern := `^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}$`
   return regexp.MustCompile(pattern).MatchString(email)
}

// IsMobile 检查手机号码格式是否合法
// @param mobile string 手机号码
// @return bool 检查结果
func IsMobile(mobile string) bool {
   pattern := `^(13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8}$`
   return regexp.MustCompile(pattern).MatchString(mobile)
}

// IsPositiveInt 检查数字是否为正整数
// @param num string 数字
// @return bool 检查结果
func IsPositiveInt(num string) bool {
   pattern := `^[1-9]\d*$`
   return regexp.MustCompile(pattern).MatchString(num)
}

// IsTime 检查时间是否合法
// @param time string 时间,格式:时:分:秒,示例:5:1:2、12:34:56
// @return bool 检查结果
func IsTime(time string) bool {
   pattern := `^([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d$`
   return regexp.MustCompile(pattern).MatchString(time)
}

// IsDate 检查日期是否合法
// @param date string 日期,格式:年-月-日,示例:2008-08-08
// @return bool 检查结果
func IsDate(date string) bool {
   pattern := `^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$`
   return regexp.MustCompile(pattern).MatchString(date)
}

// IsIp 检查IP地址(IPV4)是否合法
// @param ip string IP地址(IPV4),示例:183.232.231.172
// @return bool 检查结果
func IsIp(ip string) bool {
   pattern := `^\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}$`
   return regexp.MustCompile(pattern).MatchString(ip)
}

func main() {
   var email string
   var mobile string
   var num string
   var time string
   var date string
   var ip string

   email = "demo@manong.life"
   if IsEmail(email) {
      fmt.Printf("『%v』是合法邮箱地址 \n", email) // 『demo@manong.life』是合法邮箱地址
   } else {
      fmt.Printf("『%v』是非法邮箱地址 \n", email)
   }

   email = "demo#manong.life"
   if IsEmail(email) {
      fmt.Printf("『%v』是合法邮箱地址 \n", email)
   } else {
      fmt.Printf("『%v』是非法邮箱地址 \n", email) // 『demo#manong.life』是非法邮箱地址
   }

   mobile = "18800000000"
   if IsMobile(mobile) {
      fmt.Printf("『%v』是合法手机号码 \n", mobile) // 『18800000000』是合法手机号码
   } else {
      fmt.Printf("『%v』是非法手机号码 \n", mobile)
   }

   mobile = "10800000000"
   if IsMobile(mobile) {
      fmt.Printf("『%v』是合法手机号码 \n", mobile)
   } else {
      fmt.Printf("『%v』是非法手机号码 \n", mobile) // 『10800000000』是非法手机号码
   }

   num = "1024"
   if IsPositiveInt(num) {
      fmt.Printf("『%v』是正整数 \n", num) // 『1024』是正整数
   } else {
      fmt.Printf("『%v』非正整数 \n", num)
   }

   num = "1.24"
   if IsPositiveInt(num) {
      fmt.Printf("『%v』是正整数 \n", num)
   } else {
      fmt.Printf("『%v』非正整数 \n", num) // 『1.24』非正整数
   }

   time = "5:1:2"
   if IsTime(time) {
      fmt.Printf("『%v』是合法时间 \n", time) // 『5:1:2』是合法时间
   } else {
      fmt.Printf("『%v』是非法时间 \n", time)
   }

   time = "12:34:56"
   if IsTime(time) {
      fmt.Printf("『%v』是合法时间 \n", time) // 『12:34:56』是合法时间
   } else {
      fmt.Printf("『%v』是非法时间 \n", time)
   }

   time = "23:45:67"
   if IsTime(time) {
      fmt.Printf("『%v』是合法时间 \n", time)
   } else {
      fmt.Printf("『%v』是非法时间 \n", time) // 『23:45:67』是非法时间
   }

   date = "2008-08-08"
   if IsDate(date) {
      fmt.Printf("『%v』是合法日期 \n", date) // 『2008-08-08』是合法日期
   } else {
      fmt.Printf("『%v』是非法日期 \n", date)
   }

   date = "2008-02-30"
   if IsDate(date) {
      fmt.Printf("『%v』是合法日期 \n", date)
   } else {
      fmt.Printf("『%v』是非法日期 \n", date) // 『2008-02-30』是非法日期
   }

   ip = "183.232.231.172"
   if IsIp(ip) {
      fmt.Printf("『%v』是合法IP地址 \n", ip) // 『183.232.231.172』是合法IP地址
   } else {
      fmt.Printf("『%v』是非法IP地址 \n", ip)
   }

   ip = "183.232.231.XXX"
   if IsIp(ip) {
      fmt.Printf("『%v』是合法IP地址 \n", ip)
   } else {
      fmt.Printf("『%v』是非法IP地址 \n", ip) // 『183.232.231.XXX』是非法IP地址
   }
}

//========== 总结 ==========//
// 1、使用regexp.MatchString("pattern", "s")虽然代码简洁,但性能regexp.MustCompile("pattern").MatchString("s")比稍差,建议使用后者。

Copyright © 2024 码农人生. All Rights Reserved