github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/03_form/demo02_checkform.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "net/http" 7 "regexp" 8 "strconv" 9 ) 10 11 func register(w http.ResponseWriter, r *http.Request) { 12 13 //r.FormValue("username") 这个可以不需要提前调用 ParseForm() 14 // 只会返回同名参数中的第一个,若参数不存在则返回空字符串。 15 16 r.ParseForm() 17 //1.验证必填字段 18 username := r.Form.Get("username") 19 if len(username) == 0 { 20 fmt.Println("用户名不能为空!") 21 fmt.Fprintf(w, "用户名不能为空!") //这个写入到w的是输出到客户端的 22 } 23 //2.验证数字 24 age, err := strconv.Atoi(r.Form.Get("age")) 25 if err != nil { 26 //数字转化出错了,那么可能就是不是数字 27 fmt.Println("您输入的不是数字!") 28 fmt.Fprintf(w, "您输入的不是数字!") //这个写入到w的是输出到客户端的 29 } 30 //接下来就可以判断这个数字的大小范围了 31 if age > 100 || age < 0 { 32 //太大了或太小了 33 fmt.Println("您输入的年龄太大了或太小了,请输入0-100之间的整数!") 34 fmt.Fprintf(w, "您输入的年龄太大了或太小了,请输入0-100之间的整数!") //这个写入到w的是输出到客户端的 35 } 36 //或者正则表达式 37 if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m { 38 fmt.Println("验证有误,您输入的年龄太大了或太小了!") 39 fmt.Fprintf(w, "验证有误,您输入的年龄太大了或太小了!") 40 } 41 42 //3.验证中文 43 if m, _ := regexp.MatchString(`^[\x{4e00}-\x{9fa5}]+$`, r.Form.Get("zhname")); !m { 44 fmt.Println("验证有误,请输入中文!") 45 fmt.Fprintf(w, "验证有误,请输入中文!") 46 } 47 48 //4. 验证英文 49 if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("enname")); !m { 50 fmt.Println("验证有误,请输入英文!") 51 fmt.Fprintf(w, "验证有误,请输入英文!") 52 } 53 54 //5. 邮箱 55 if m, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$`, r.Form.Get("email")); !m { 56 fmt.Println("请输入正确邮箱地址") 57 fmt.Fprintf(w, "验证有误,请输入正确邮箱地址!") 58 } 59 60 //6. 验证手机号 61 if m, _ := regexp.MatchString(`^(1[3|5|6|7|8][0-9]\d{8})$`, r.Form.Get("mobile")); !m { 62 fmt.Println("请输入正确手机号码") 63 fmt.Fprintf(w, "验证有误,请输入正确手机号码!") 64 } 65 66 //7. 下拉菜单 67 xueli := r.Form.Get("xueli") 68 res1 := checkSelect(xueli) 69 if !res1 { 70 fmt.Println("请选择正确的下拉列表!") 71 fmt.Fprintf(w, "请选择正确的下拉列表!") 72 } 73 74 // 8. 单选按钮 75 sex := r.Form.Get("sex") 76 res2 := checkSex(sex) 77 if !res2 { 78 fmt.Println("请选择正确的性别!") 79 fmt.Fprintf(w, "请选择正确的性别!") 80 } 81 82 // 9. 复选框 83 hobby := r.Form["hobby"] 84 res3 := checkHobby(hobby) 85 if !res3 { 86 fmt.Println("请选择正确的爱好!") 87 fmt.Fprintf(w, "请选择正确的爱好!") 88 } 89 // 10 身份证号 90 //验证18位身份证,18位前17位为数字,最后一位是校验位,可能为数字或字符X。 91 if m, _ := regexp.MatchString(`^(\d{17})([0-9]|X)$`, r.Form.Get("usercard")); !m { 92 fmt.Println("请选择正确的身份证号!") 93 fmt.Fprintf(w, "请选择正确的身份证号!") 94 } 95 96 //fmt.Println("验证成功!") 97 //fmt.Fprintf(w, "验证成功!") 98 } 99 100 func checkHobby(hobby []string) bool { 101 slice := []string{"game", "girl", "money", "power"} 102 hobby2 := Slice_diff(hobby, slice) 103 if hobby2 == nil { 104 return true 105 } 106 return false 107 } 108 109 func Slice_diff(slice1, slice2 []string) (diffslice []string) { 110 for _, v := range slice1 { 111 if !InSlice(v, slice2) { 112 diffslice = append(diffslice, v) 113 } 114 } 115 return 116 } 117 118 /** 119 判断是一个切片中是否包含指定的数值 120 */ 121 func InSlice(val string, slice []string) bool { 122 for _, v := range slice { 123 if v == val { 124 return true 125 } 126 } 127 return false 128 } 129 130 /** 131 验证单选按钮 132 */ 133 func checkSex(sex string) bool { 134 slice := []string{"male", "female", "other"} 135 for _, v := range slice { 136 if v == sex { 137 return true 138 } 139 } 140 return false 141 } 142 143 /** 144 验证下拉列表 145 */ 146 func checkSelect(xueli string) bool { 147 slice := []string{"xiaoxue", "chuzhong", "gaozhong", "dazhuan", "benke", "shuoshi", "boshi", "lieshi"} 148 for _, v := range slice { 149 150 if v == xueli { 151 return true 152 } 153 } 154 return false 155 } 156 func main() { 157 http.HandleFunc("/register", register) //设置访问的路由 158 err := http.ListenAndServe(":8000", nil) //设置监听的端口 159 if err != nil { 160 log.Fatal("ListenAndServe: ", err) 161 } 162 } 163 164 /* 165 验证数字:^[0-9]*$ 166 验证n位的数字:^\d{n}$ 167 验证至少n位数字:^\d{n,}$ 168 验证m-n位的数字:^\d{m,n}$ 169 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 170 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 171 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$ 172 验证非零的正整数:^\+?[1-9][0-9]*$ 173 验证非零的负整数:^\-[1-9][0-9]*$ 174 验证非负整数(正整数 + 0) ^\d+$ 175 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$ 176 验证长度为3的字符:^.{3}$ 177 验证由26个英文字母组成的字符串:^[A-Za-z]+$ 178 验证由26个大写英文字母组成的字符串:^[A-Z]+$ 179 验证由26个小写英文字母组成的字符串:^[a-z]+$ 180 验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 181 验证由数字、26个英文字母或者下划线组成的字符串:^\w+$ 182 验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。 183 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 184 验证汉字:^[\u4e00-\u9fa5],{0,}$ 185 验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 186 验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ 187 验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。 188 验证身份证号(15位或18位数字):^\d{15}|\d{}18$ 189 验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12” 190 验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。 191 整数:^-?\d+$ 192 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$ 193 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 194 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 195 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 196 浮点数 ^(-?\d+)(\.\d+)?$ 197 */