《go web 編程》第四章 表單:驗(yàn)證表單的輸入

單選按鈕

想要判斷 radio 按鈕是否有一個(gè)被選中了,我們頁面的輸出可能就是一個(gè)男、女性別的選擇,但是也可能一個(gè) 15 歲大的無聊小孩,一手拿著 http 協(xié)議的書,另一只手通過 telnet 客戶端向你的程序在發(fā)送請求呢,你設(shè)定的性別男值是 1,女是 2,他給你發(fā)送一個(gè) 3,你的程序會出現(xiàn)異常嗎?因此我們也需要像下拉菜單的判斷方式類似,判斷我們獲取的值是我們預(yù)設(shè)的值,而不是額外的值。

<input type="radio" name="gender" value="1">男
<input type="radio" name="gender" value="2">女

也可以類似下拉菜單的做法一樣

slice:=[]string{"1","2"}

for _, v := range slice {
    if v == r.Form.Get("gender") {
        return true
    }
}
return false

復(fù)選框

有一項(xiàng)選擇興趣的復(fù)選框,你想確定用戶選中的和你提供給用戶選擇的是同一個(gè)類型的數(shù)據(jù)。

<input type="checkbox" name="interest" value="football">足球
<input type="checkbox" name="interest" value="basketball">籃球
<input type="checkbox" name="interest" value="tennis">網(wǎng)球

對于復(fù)選框我們的驗(yàn)證和單選有點(diǎn)不一樣,因?yàn)榻邮盏降臄?shù)據(jù)是一個(gè) slice


Xnip2022-09-07_09-47-49.jpg

日期和時(shí)間

想確定用戶填寫的日期或時(shí)間是否有效。例如
,用戶在日程表中安排 8 月份的第 45 天開會,或者提供未來的某個(gè)時(shí)間作為生日。

Go 里面提供了一個(gè) time 的處理包,我們可以把用戶的輸入年月日轉(zhuǎn)化成相應(yīng)的時(shí)間,然后進(jìn)行邏輯判斷

t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.Local)
fmt.Printf("Go launched at %s\n", t.Local())

獲取 time 之后我們就可以進(jìn)行很多時(shí)間函數(shù)的操作。具體的判斷就根據(jù)自己的需求調(diào)整。

身份證號碼

如果我們想驗(yàn)證表單輸入的是否是身份證,通過正則也可以方便的驗(yàn)證,但是身份證有 15 位和 18 位,我們兩個(gè)都需要驗(yàn)證

// 驗(yàn)證 15 位身份證,15 位的是全部數(shù)字
if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m {
    return false
}

// 驗(yàn)證 18 位身份證,18 位前 17 位為數(shù)字,最后一位是校驗(yàn)位,可能為數(shù)字或字符 X。
if m, _ := regexp.MatchString(`^(\d{17})([0-9]|X)$`, r.Form.Get("usercard")); !m {
    return false
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容