• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Go语言对输入做正则表达式验证

武飞扬头像
寅恪光潜
帮助1

        正则表达式在很多语言中都被支持,用的很广泛,尤其是WEB开发中都会用到对输入做严格的验证,比如手机号码、年龄、邮箱等这些格式的判断,防止输入一些错误或非法的数据进来。

我们先来看个简单的判断,是否是整数的输入:

  1.  
    package main
  2.  
     
  3.  
    import (
  4.  
    "fmt"
  5.  
    "regexp"
  6.  
    "strconv"
  7.  
    )
  8.  
     
  9.  
    func main() {
  10.  
    //判断是否是整型
  11.  
    getint, err := strconv.Atoi("12")
  12.  
    fmt.Printf("%v,%v\n", getint, err == nil) //12,true
  13.  
    //正则表达式
  14.  
    m, _ := regexp.MatchString("^[0-9] $", "12a")
  15.  
    fmt.Printf("%v\n", m) //false
  16.  
    }
学新通

如果单纯只是判断类型的话,还可以使用到前面有介绍的反射,甚至还可以用到空接口来判断输入的类型。

fmt.Printf("%v,%v\n", reflect.TypeOf("a").Name() == "int", reflect.TypeOf(12).Name() == "int") //false,true

或者使用空接口:

  1.  
    var i interface{}
  2.  
    i = 12
  3.  
    k, v := i.(int)
  4.  
    fmt.Printf("%v,%v\n", k, v) //12,true

当然更多的时候,我们都会对输入做各种更具体严格的格式验证,这个时候单纯判断类别就行不通了,需要用到正则表达式。
比如上面匹配整数的"^[0-9] $"正则表达式,^表示开始,$表示结束,中间的[0-9]就是只能是阿拉伯数字, 表示一个或多个的通配符,*就是匹配0个或多个的通配符。
掌握了正则表达式的基本结构之后,对于大部分的正则表达式的验证就显得很简单了,其实也不需要去死记,做个备注,有需要的时候拷贝来使用即可。下面是一些常用的正则表达式:

  1.  
    package main
  2.  
     
  3.  
    import (
  4.  
    "fmt"
  5.  
    "reflect"
  6.  
    "regexp"
  7.  
    "strconv"
  8.  
    )
  9.  
     
  10.  
    func main() {
  11.  
    //判断是否是整型
  12.  
    getint, err := strconv.Atoi("12")
  13.  
    fmt.Printf("%v,%v\n", getint, err == nil) //12,true
  14.  
    //正则表达式
  15.  
    m, _ := regexp.MatchString("^[0-9] $", "12a")
  16.  
    fmt.Printf("%v\n", m) //false
  17.  
     
  18.  
    fmt.Printf("%v,%v\n", reflect.TypeOf("a").Name() == "int", reflect.TypeOf(12).Name() == "int") //false,true
  19.  
     
  20.  
    var i interface{}
  21.  
    i = 12
  22.  
    k, v := i.(int)
  23.  
    fmt.Printf("%v,%v\n", k, v) //12,true
  24.  
     
  25.  
    //中文
  26.  
    m2, _ := regexp.MatchString("^\\p{Han} $", "寅恪光潜")
  27.  
    fmt.Printf("%v\n", m2) //true
  28.  
    //中英文的标点符号
  29.  
    m3, _ := regexp.MatchString("^\\p{P} $", ".。,")
  30.  
    fmt.Printf("%v\n", m3) //true
  31.  
    //全部大写英文
  32.  
    m4, _ := regexp.MatchString("^[A-Z] $", "ABC")
  33.  
    fmt.Printf("%v\n", m4) //true
  34.  
    //全部小写英文
  35.  
    m5, _ := regexp.MatchString("^[a-z] $", "abc")
  36.  
    fmt.Printf("%v\n", m5) //true
  37.  
    //大小写英文
  38.  
    m6, _ := regexp.MatchString("^[a-zA-Z] $", "abABCrw")
  39.  
    fmt.Printf("%v\n", m6)
  40.  
    //邮件地址
  41.  
    m7, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,})\.([a-z]{2,4})$`, "12345@qq.com")
  42.  
    fmt.Printf("%v\n", m7)
  43.  
    //手机号码
  44.  
    m8, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, "13312345678")
  45.  
    fmt.Printf("%v\n", m8)
  46.  
    //身份证(15位全数字,或18位的,最后一位是数字或X)
  47.  
    m9, _ := regexp.MatchString(`^(\d{15})$`, "123456789123456")
  48.  
    m10, _ := regexp.MatchString(`^(\d{17})([0-9]|([xX]))$`, "12345678912345678x")
  49.  
    fmt.Printf("%v,%v\n", m9, m10)
  50.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgejace
系列文章
更多 icon
同类精品
更多 icon
继续加载