Go语言对输入做正则表达式验证
正则表达式在很多语言中都被支持,用的很广泛,尤其是WEB开发中都会用到对输入做严格的验证,比如手机号码、年龄、邮箱等这些格式的判断,防止输入一些错误或非法的数据进来。
我们先来看个简单的判断,是否是整数的输入:
-
package main
-
-
import (
-
"fmt"
-
"regexp"
-
"strconv"
-
)
-
-
func main() {
-
//判断是否是整型
-
getint, err := strconv.Atoi("12")
-
fmt.Printf("%v,%v\n", getint, err == nil) //12,true
-
//正则表达式
-
m, _ := regexp.MatchString("^[0-9] $", "12a")
-
fmt.Printf("%v\n", m) //false
-
}
如果单纯只是判断类型的话,还可以使用到前面有介绍的反射,甚至还可以用到空接口来判断输入的类型。
fmt.Printf("%v,%v\n", reflect.TypeOf("a").Name() == "int", reflect.TypeOf(12).Name() == "int") //false,true
或者使用空接口:
-
var i interface{}
-
i = 12
-
k, v := i.(int)
-
fmt.Printf("%v,%v\n", k, v) //12,true
当然更多的时候,我们都会对输入做各种更具体严格的格式验证,这个时候单纯判断类别就行不通了,需要用到正则表达式。
比如上面匹配整数的"^[0-9] $"正则表达式,^表示开始,$表示结束,中间的[0-9]就是只能是阿拉伯数字, 表示一个或多个的通配符,*就是匹配0个或多个的通配符。
掌握了正则表达式的基本结构之后,对于大部分的正则表达式的验证就显得很简单了,其实也不需要去死记,做个备注,有需要的时候拷贝来使用即可。下面是一些常用的正则表达式:
-
package main
-
-
import (
-
"fmt"
-
"reflect"
-
"regexp"
-
"strconv"
-
)
-
-
func main() {
-
//判断是否是整型
-
getint, err := strconv.Atoi("12")
-
fmt.Printf("%v,%v\n", getint, err == nil) //12,true
-
//正则表达式
-
m, _ := regexp.MatchString("^[0-9] $", "12a")
-
fmt.Printf("%v\n", m) //false
-
-
fmt.Printf("%v,%v\n", reflect.TypeOf("a").Name() == "int", reflect.TypeOf(12).Name() == "int") //false,true
-
-
var i interface{}
-
i = 12
-
k, v := i.(int)
-
fmt.Printf("%v,%v\n", k, v) //12,true
-
-
//中文
-
m2, _ := regexp.MatchString("^\\p{Han} $", "寅恪光潜")
-
fmt.Printf("%v\n", m2) //true
-
//中英文的标点符号
-
m3, _ := regexp.MatchString("^\\p{P} $", ".。,")
-
fmt.Printf("%v\n", m3) //true
-
//全部大写英文
-
m4, _ := regexp.MatchString("^[A-Z] $", "ABC")
-
fmt.Printf("%v\n", m4) //true
-
//全部小写英文
-
m5, _ := regexp.MatchString("^[a-z] $", "abc")
-
fmt.Printf("%v\n", m5) //true
-
//大小写英文
-
m6, _ := regexp.MatchString("^[a-zA-Z] $", "abABCrw")
-
fmt.Printf("%v\n", m6)
-
//邮件地址
-
m7, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,})\.([a-z]{2,4})$`, "12345@qq.com")
-
fmt.Printf("%v\n", m7)
-
//手机号码
-
m8, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, "13312345678")
-
fmt.Printf("%v\n", m8)
-
//身份证(15位全数字,或18位的,最后一位是数字或X)
-
m9, _ := regexp.MatchString(`^(\d{15})$`, "123456789123456")
-
m10, _ := regexp.MatchString(`^(\d{17})([0-9]|([xX]))$`, "12345678912345678x")
-
fmt.Printf("%v,%v\n", m9, m10)
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgejace
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01