Add more term fixes and markdown format fixes
This commit is contained in:
@@ -6,8 +6,8 @@
|
||||
|
||||
## 必填欄位
|
||||
你想要確保從一個表單元素中得到一個值,例如前面小節裡面的使用者名稱,我們如何處理呢?Go 有一個內建函式 `len` 可以取得字串的長度,這樣我們就可以透過 len 來取得資料的長度,例如:
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if len(r.Form["username"][0])==0{
|
||||
//為空的處理
|
||||
}
|
||||
@@ -18,8 +18,8 @@ if len(r.Form["username"][0])==0{
|
||||
你想要確保一個表單輸入框中取得的只能是數字,例如,你想透過表單取得某個人的具體年齡是 50 歲還是 10 歲,而不是像“一把年紀了”或“年輕著呢”這種描述
|
||||
|
||||
如果我們是判斷正整數,那麼我們先轉化成 int 型別,然後進行處理
|
||||
```Go
|
||||
|
||||
```Go
|
||||
getint,err:=strconv.Atoi(r.Form.Get("age"))
|
||||
if err!=nil{
|
||||
//數字轉化出錯了,那麼可能就不是數字
|
||||
@@ -31,8 +31,8 @@ if getint >100 {
|
||||
}
|
||||
```
|
||||
還有一種方式就是正則匹配的方式
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m {
|
||||
return false
|
||||
}
|
||||
@@ -43,8 +43,8 @@ if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m {
|
||||
|
||||
## 中文
|
||||
有時候我們想透過表單元素取得一個使用者的中文名字,但是又為了保證取得的是正確的中文,我們需要進行驗證,而不是使用者隨便的一些輸入。對於中文我們目前有兩種方式來驗證,可以使用 `unicode` 套件提供的 `func Is(rangeTab *RangeTable, r rune) bool` 來驗證,也可以使用正則方式來驗證,這裡使用最簡單的正則方式,如下程式碼所示
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if m, _ := regexp.MatchString("^\\p{Han}+$", r.Form.Get("realname")); !m {
|
||||
return false
|
||||
}
|
||||
@@ -53,28 +53,28 @@ if m, _ := regexp.MatchString("^\\p{Han}+$", r.Form.Get("realname")); !m {
|
||||
我們期望透過表單元素取得一個英文值,例如我們想知道一個使用者的英文名,應該是 astaxie,而不是 asta 謝。
|
||||
|
||||
我們可以很簡單的透過正則驗證資料:
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m {
|
||||
return false
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## 電子郵件地址
|
||||
你想知道使用者輸入的一個 Email 地址是否正確,透過如下這個方式可以驗證:
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if m, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$`, r.Form.Get("email")); !m {
|
||||
fmt.Println("no")
|
||||
}else{
|
||||
fmt.Println("yes")
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## 手機號碼
|
||||
你想要判斷使用者輸入的手機號碼是否正確,透過正則也可以驗證:
|
||||
```Go
|
||||
|
||||
```Go
|
||||
if m, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, r.Form.Get("mobile")); !m {
|
||||
return false
|
||||
}
|
||||
@@ -92,8 +92,8 @@ if m, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, r.Form.Get("mobile")
|
||||
</select>
|
||||
```
|
||||
那麼我們可以這樣來驗證
|
||||
```Go
|
||||
|
||||
```Go
|
||||
slice:=[]string{"apple","pear","banana"}
|
||||
|
||||
v := r.Form.Get("fruit")
|
||||
@@ -113,8 +113,8 @@ return false
|
||||
<input type="radio" name="gender" value="2">女
|
||||
```
|
||||
那我們也可以類似下拉選單的做法一樣
|
||||
```Go
|
||||
|
||||
```Go
|
||||
slice:=[]string{"1","2"}
|
||||
|
||||
for _, v := range slice {
|
||||
@@ -133,8 +133,8 @@ return false
|
||||
<input type="checkbox" name="interest" value="tennis">網球
|
||||
```
|
||||
對於複選框我們的驗證和單選有點不一樣,因為接收到的資料是一個 slice
|
||||
```Go
|
||||
|
||||
```Go
|
||||
slice:=[]string{"football","basketball","tennis"}
|
||||
a:=Slice_diff(r.Form["interest"],slice)
|
||||
if a == nil{
|
||||
@@ -150,8 +150,8 @@ return false
|
||||
,使用者在日程表中安排 8 月份的第 45 天開會,或者提供未來的某個時間作為生日。
|
||||
|
||||
Go 裡面提供了一個 time 的處理套件,我們可以把使用者的輸入年月日轉化成相應的時間,然後進行邏輯判斷
|
||||
```Go
|
||||
|
||||
```Go
|
||||
t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
|
||||
fmt.Printf("Go launched at %s\n", t.Local())
|
||||
```
|
||||
@@ -159,8 +159,8 @@ fmt.Printf("Go launched at %s\n", t.Local())
|
||||
|
||||
## 身份證號碼
|
||||
如果我們想驗證表單輸入的是否是身份證,透過正則也可以方便的驗證,但是身份證有 15 位和 18 位,我們兩個都需要驗證
|
||||
```Go
|
||||
|
||||
```Go
|
||||
//驗證 15 位身份證,15 位的是全部數字
|
||||
if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m {
|
||||
return false
|
||||
@@ -170,8 +170,8 @@ if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m {
|
||||
if m, _ := regexp.MatchString(`^(\d{17})([0-9]|X)$`, r.Form.Get("usercard")); !m {
|
||||
return false
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
上面列出了我們一些常用的伺服器端的表單元素驗證,希望透過這個引匯入門,能夠讓你對 Go 的資料驗證有所了解,特別是 Go 裡面的正則處理。
|
||||
|
||||
## links
|
||||
|
||||
Reference in New Issue
Block a user