国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Go中常用的表單驗(yàn)證(正則表達(dá)式)

這篇具有很好參考價(jià)值的文章主要介紹了Go中常用的表單驗(yàn)證(正則表達(dá)式)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?對(duì)于性能要求很高的用戶來說,這是一個(gè)老生常談的問題了,他們認(rèn)為應(yīng)該盡量避免使用正則表達(dá)式,因?yàn)槭褂谜齽t表達(dá)式的速度會(huì)比較慢。但是在目前機(jī)器性能那么強(qiáng)勁的情況下,對(duì)于這種簡(jiǎn)單的正則表達(dá)式效率和類型轉(zhuǎn)換函數(shù)是沒有什么差別的。如果你對(duì)正則表達(dá)式很熟悉,而且你在其它語言中也在使用它,那么在Go里面使用正則表達(dá)式將是一個(gè)便利的方式。

Go實(shí)現(xiàn)的正則是RE2,所有的字符都是UTF-8編碼的。


?數(shù)字

你想要確保一個(gè)表單輸入框中獲取的只能是數(shù)字,例如,你想通過表單獲取某個(gè)人的具體年齡是50歲還是10歲,而不是像“一把年紀(jì)了”或“年輕著呢”這種描述

如果我們是判斷正整數(shù),那么我們先轉(zhuǎn)化成int類型,然后進(jìn)行處理


getint,err:=strconv.Atoi(r.Form.Get("age"))
if err!=nil{
	//數(shù)字轉(zhuǎn)化出錯(cuò)了,那么可能就不是數(shù)字
}

//接下來就可以判斷這個(gè)數(shù)字的大小范圍了
if getint >100 {
	//太大了
}

還有一種方式就是正則匹配的方式


if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m {
	return false
}

中文

有時(shí)候我們想通過表單元素獲取一個(gè)用戶的中文名字,但是又為了保證獲取的是正確的中文,我們需要進(jìn)行驗(yàn)證,而不是用戶隨便的一些輸入。對(duì)于中文我們目前有兩種方式來驗(yàn)證,可以使用?unicode?包提供的?func Is(rangeTab *RangeTable, r rune) bool?來驗(yàn)證,也可以使用正則方式來驗(yàn)證,這里使用最簡(jiǎn)單的正則方式,如下代碼所示


if m, _ := regexp.MatchString("^\\p{Han}+$", r.Form.Get("realname")); !m {
	return false
}

英文

我們期望通過表單元素獲取一個(gè)英文值,例如我們想知道一個(gè)用戶的英文名,應(yīng)該是astaxie,而不是asta謝。

我們可以很簡(jiǎn)單的通過正則驗(yàn)證數(shù)據(jù):


if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m {
	return false
}

電子郵件地址

你想知道用戶輸入的一個(gè)Email地址是否正確,通過如下這個(gè)方式可以驗(yàn)證:

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")
}

手機(jī)號(hào)碼


if m, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, r.Form.Get("mobile")); !m {
	return false
}

下拉菜單

如果我們想要判斷表單里面<select>元素生成的下拉菜單中是否有被選中的項(xiàng)目。有些時(shí)候黑客可能會(huì)偽造這個(gè)下拉菜單不存在的值發(fā)送給你,那么如何判斷這個(gè)值是否是我們預(yù)設(shè)的值呢?

我們的select可能是這樣的一些元素


<select name="fruit">
<option value="apple">apple</option>
<option value="pear">pear</option>
<option value="banana">banana</option>
</select>

那么我們可以這樣來驗(yàn)證


slice:=[]string{"apple","pear","banana"}

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

return false

單選按鈕

如果我們想要判斷radio按鈕是否有一個(gè)被選中了,我們頁面的輸出可能就是一個(gè)男、女性別的選擇,但是也可能一個(gè)15歲大的無聊小孩,一手拿著http協(xié)議的書,另一只手通過telnet客戶端向你的程序在發(fā)送請(qǐng)求呢,你設(shè)定的性別男值是1,女是2,他給你發(fā)送一個(gè)3,你的程序會(huì)出現(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)球

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


slice:=[]string{"football","basketball","tennis"}
a:=Slice_diff(r.Form["interest"],slice)
if a == nil{
	return true
}

return false

上面這個(gè)函數(shù)Slice_diff包含在astaxie開源的一個(gè)庫里(操作slice和map的庫):

go get github.com/astaxie/beeku

日期和時(shí)間

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

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


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

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


身份證號(hà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
}

上面列出了我們一些常用的服務(wù)器端的表單元素驗(yàn)證文章來源地址http://www.zghlxwxcb.cn/news/detail-549384.html

到了這里,關(guān)于Go中常用的表單驗(yàn)證(正則表達(dá)式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端開發(fā)必備:掌握正則表達(dá)式,輕松應(yīng)對(duì)復(fù)雜的表單驗(yàn)證

    前端開發(fā)必備:掌握正則表達(dá)式,輕松應(yīng)對(duì)復(fù)雜的表單驗(yàn)證

    在前端開發(fā)中,經(jīng)常需要處理 URL 地址、校驗(yàn)手機(jī)號(hào)合法性、提取域名等。正則表達(dá)式是一種常用的工具。通過使用正則表達(dá)式,我們可以對(duì)用戶輸入進(jìn)行有效的驗(yàn)證,確保數(shù)據(jù)的合法性和完整性。本文將介紹一些常見的正則表達(dá)式,幫助你在開發(fā)中處理匹配的關(guān)鍵信息。

    2024年01月19日
    瀏覽(31)
  • 【Go】Go 文本匹配 - 正則表達(dá)式基礎(chǔ)與編程中的應(yīng)用 (8000+字)

    【Go】Go 文本匹配 - 正則表達(dá)式基礎(chǔ)與編程中的應(yīng)用 (8000+字)

    ???????? 本文共計(jì)8361字,預(yù)計(jì)閱讀時(shí)間18分鐘 ????????正則表達(dá)式(Regular Expression, 縮寫常用regex, regexp表示)是計(jì)算機(jī)科學(xué)中的一個(gè)概念,很多高級(jí)語言都支持正則表達(dá)式。 目錄 何為正則表達(dá)式 語法規(guī)則 普通字符 字符轉(zhuǎn)義 限定符 定位符 分組構(gòu)造 模式匹配 regexp包

    2024年02月12日
    瀏覽(23)
  • Javascript正則表達(dá)式常用的驗(yàn)證(驗(yàn)證手機(jī)號(hào),電話,郵箱,網(wǎng)址等)

    Javascript正則表達(dá)式常用的驗(yàn)證(驗(yàn)證手機(jī)號(hào),電話,郵箱,網(wǎng)址等)

    驗(yàn)證手機(jī)號(hào)碼是否合法 驗(yàn)證規(guī)則:11位數(shù)字,以1開頭。 第二位不能是二,不能是0[3456789] 例一: 預(yù)覽效果 ?例二: 前面添加 ! 的意義是給這個(gè)函數(shù) ?取反 預(yù)覽效果 驗(yàn)證電話號(hào)碼? 驗(yàn)證規(guī)則:區(qū)號(hào)+號(hào)碼,區(qū)號(hào)以0開頭,3位或4位 號(hào)碼由7位或8位數(shù)字組成 區(qū)號(hào)與號(hào)碼之間可以

    2023年04月22日
    瀏覽(29)
  • 正則表達(dá)式——URL驗(yàn)證

    “.” : “+”: “?”: “.”: “()”: “*”: “?”: “^”: .(點(diǎn)號(hào))也是一個(gè)正則表達(dá)式,它匹配 任何一個(gè)字符 如:“a” 或 “1” ^ : 定義了以什么 開始 匹配一個(gè)或多個(gè) d 匹配一個(gè) 數(shù)字 d+ 匹配一個(gè)或多個(gè)數(shù)字 ? 設(shè)置括號(hào)內(nèi)的選項(xiàng)是可選的 . 匹配 “.” s 可以一個(gè)空格 s

    2024年01月17日
    瀏覽(18)
  • 手機(jī)號(hào)正則表達(dá)式驗(yàn)證

    郵箱驗(yàn)證: 手機(jī)驗(yàn)證: 身份證驗(yàn)證: 銀行卡號(hào)驗(yàn)證: 密碼強(qiáng)度驗(yàn)證: 網(wǎng)址驗(yàn)證: IP地址驗(yàn)證: 中文驗(yàn)證: 整數(shù)驗(yàn)證: 浮點(diǎn)數(shù)驗(yàn)證:

    2024年02月06日
    瀏覽(29)
  • 使用正則表達(dá)式驗(yàn)證銀行帳號(hào)

    銀行帳號(hào)是在任何特定銀行開設(shè)賬戶后分配給賬戶持有人的唯一編號(hào)。從技術(shù)上講,我們可以將銀行帳號(hào)視為主鍵。銀行帳號(hào)使我們能夠進(jìn)行借記、貸記和其他交易。根據(jù) RBI 指南,銀行帳號(hào)具有獨(dú)特的結(jié)構(gòu)。Account Number的結(jié)構(gòu)如下: 銀行帳號(hào)僅以數(shù)字形式書寫。 銀行帳號(hào)長(zhǎng)

    2023年04月22日
    瀏覽(21)
  • 【SQL-正則】利用正則表達(dá)式進(jìn)行過濾操作(常用正則表達(dá)式)

    1、由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串 2、非負(fù)整數(shù)(正整數(shù) + 0 ) 3、正整數(shù) 4、非正整數(shù)(負(fù)整數(shù) + 0) 5、負(fù)整數(shù) 6、整數(shù) 7、非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0) 8、正浮點(diǎn)數(shù) 9、非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0) 10、負(fù)浮點(diǎn)數(shù) 11、浮點(diǎn)數(shù) 12、由26個(gè)英文字母組成的字符串 13、

    2024年02月12日
    瀏覽(32)
  • 如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)

    如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)

    在日常的Web開發(fā)中,處理表單數(shù)據(jù)是一個(gè)常見的任務(wù)。而XML是一種常用的數(shù)據(jù)格式,用于在不同的系統(tǒng)之間傳遞和存儲(chǔ)數(shù)據(jù)。本文通過闡述一個(gè)技術(shù)問題并給出解答的方式,介紹如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)。我們將探討整體設(shè)計(jì)、編寫思路和一個(gè)完整的案例,

    2024年02月10日
    瀏覽(39)
  • Java使用正則表達(dá)式-驗(yàn)證郵箱

    正則表達(dá)式通常被用于判斷語句中,用來檢查某一個(gè)字符串是否滿足某一格式。正則表達(dá)式是含有一些具有特殊意義字符的字符串。 幾種常用的正則表達(dá)式元字符: . 代表任意一個(gè)字符 \\\\d 代表0-9的如何一個(gè)數(shù)字 \\\\D 代表任何一個(gè)非數(shù)字字符 \\\\s 代表空白字符 如\\\'t\\\'、\\\'n\\\' \\\\S 代表

    2024年02月08日
    瀏覽(25)
  • [Python進(jìn)階] 正則表達(dá)式的驗(yàn)證

    [Python進(jìn)階] 正則表達(dá)式的驗(yàn)證

    正則表達(dá)式的語法很令人頭疼,即使對(duì)經(jīng)常使用它的人來說也是如此。由于難于讀寫,容易出錯(cuò),所以找一種工具對(duì)正則表達(dá)式進(jìn)行測(cè)試是很有必要的。 8.2.1 本地驗(yàn)證 通過 Regex Tester 這款軟件可以在本地對(duì)正則表達(dá)式進(jìn)行驗(yàn)證,下面是Regex Tester運(yùn)行時(shí)的截圖: 分別將 源文本

    2024年01月20日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包