網(wǎng)站首頁 編程語言 正文
“輸入驗(yàn)證”代碼檢查用戶輸入值,在Python中我們用的最多的是input()函數(shù),但是有些情況下反復(fù)使用input()函數(shù)可能會(huì)遺漏某些場(chǎng)景,并且該函數(shù)允許無效輸入通過檢查。因此我們需要使用Python的第三方模塊PyInputPlus進(jìn)行輸入驗(yàn)證。
PyInputPlus包含與input()類似的、用戶多種數(shù)據(jù)(數(shù)字日期、E-mail地址等)的函數(shù)。如果用戶輸入了無效的內(nèi)容,例如格式錯(cuò)誤的日期或超出預(yù)期范圍的數(shù)字,PyIputPlus會(huì)再次提示他們輸入。PyInputPlus還包含其他有用的功能,例如提示用戶的次數(shù)限制和時(shí)間限制(如果要求用戶在時(shí)限內(nèi)作出響應(yīng))。
安裝PyInputPlus
PyInputPlus不是Python標(biāo)準(zhǔn)庫(kù)的一部分,因此需要使用pip單獨(dú)安裝。命令如下:
pip install --user pyinputplus
PyInputPlus具有以下幾種用于不同類型輸入的函數(shù):
inputStr()類似于內(nèi)置的input()函數(shù),但具有一般的PyInputPlus功能inputNum()確保用戶輸入數(shù)字并返回int或float值,這取決于數(shù)字是否包含小數(shù)點(diǎn)inputChoice()確保用戶輸入習(xí)題提供的選項(xiàng)之一inputMenu()與inputChoice類似,但提供一個(gè)帶有數(shù)字或字母選項(xiàng)的菜單inputDatetime()確保用戶輸入日期和時(shí)間inputYesNo()確保用戶輸入“yes”或“no”響應(yīng)inputBool()類似inputYesNo(),但接收“True”或“False”響應(yīng),并返回一個(gè)布爾值inputEmail()確保用戶輸入有效的E-mail地址inputFilepath()確保用戶輸入有效的文件路徑和文件名,并可以選擇檢查是否存在具有該名稱的文件inputPassword()類似于內(nèi)置的input(),但是在用戶輸入時(shí)顯示*字符,因此不會(huì)在屏幕上顯示密碼或者其他敏感信息只要輸入了無效內(nèi)容,以上函數(shù)就會(huì)自動(dòng)提示用戶:
>>> import pyinputplus as pyip
>>> response = pyip.inputNum()
five
'five' is not a number
10
>>> response
10
每次調(diào)用PyInputPlus模塊的函數(shù)時(shí),import語句中的as pyip代碼讓我們不必輸入pyinputplus,而是可以使用較短的pyip名稱。正如可以將字符串傳遞給input()以提供提示一樣,也可以將字符串傳遞給PyInputPlus模塊的函數(shù)的prompt關(guān)鍵字參數(shù)來顯示提示:
>>> import pyinputplus as pyip
>>> response = pyip.inputInt(prompt='Enter a number')
Enter a number:cat
'cat' is not an Integer.
Enter a number:10
>>> response
10
關(guān)鍵字參數(shù)min、max、greaterThan和lessThan
接收int和float數(shù)的inputNum()、inputInt()和inputFloat()函數(shù)還具有min、max、greaterThan和lessThan關(guān)鍵字參數(shù),用于指定有效值范圍,例如如下例子:
>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ', min=4)
Enter num: 3
Input must be at minimum:4
Enter num: 4
>>> response
4
>>> response = pyip.inputNum('Enter num: ', greaterThan=4)
Enter num: 4
Input must be greater than 4.
Enter num: 5
>>> response
5
>>> response = pyip.inputNum('Enter num: ', min=4, lessThan=6)
Enter num: 6
Input must be less than 6.
Enter num: 3
Input must be at minimum 4.
Enter num: 4
>>> response
4
關(guān)鍵字參數(shù)blank
在默認(rèn)情況下,除非將blank關(guān)鍵字參數(shù)設(shè)置為True,否則不允許輸入空格字符:
>>> import pyinputplus as pyip
>>> response = pyip.inputNum('Enter num: ')
Enter num: (blank input entered here)
Blank values are not allowed.
Enter num: 40
>>> response
40
>>> response = pyip.inputNum(blank=True)
(blank input entered here)
>>> response
''
如果想使輸入可選,使用blank=True,這樣用戶不需要輸入任何內(nèi)容。
關(guān)鍵字參數(shù)limit、timeout和default
在默認(rèn)情況下,PyInputPlus模塊的函數(shù)在程序運(yùn)行時(shí)會(huì)一直要求用戶提供有效輸入,如果希望某個(gè)函數(shù)在經(jīng)過一定次數(shù)的嘗試或一定的時(shí)間后停止要求用戶輸入,就可以使用limit和timeout關(guān)鍵字參數(shù)。用limit關(guān)鍵字參數(shù)傳遞一個(gè)整數(shù),以確定PyInputPlus的函數(shù)在放棄之前嘗試接受有效輸入多少次。用timeout關(guān)鍵字參數(shù)傳遞一個(gè)整數(shù),以確定用戶在多少秒之內(nèi)必須提供有效輸入,然后PyInputPlus模塊的函數(shù)會(huì)放棄。
如果用戶未能提供有效輸入,那么這些關(guān)鍵字參數(shù)將分別導(dǎo)致函數(shù)引發(fā)RetryLimitException或TimeoutException異常。
當(dāng)你使用這些關(guān)鍵字參數(shù)并傳入default關(guān)鍵字參數(shù)時(shí),該函數(shù)將返回默認(rèn)值,而不是引發(fā)異常。例如:
response = pyip.inputNum(limit=2, default='N/A')
hello
'hello' is not a number
world
'world' is not a number
>>> response
'N/A'
inputNum()函數(shù)使用了default關(guān)鍵字參數(shù)后不會(huì)引發(fā)RetryLimitException,只會(huì)返回字符串‘N/A’.
關(guān)鍵字參數(shù)allowRegexes和blockRegexes
我們也可以使用正則表達(dá)式指定輸入是否被接受。關(guān)鍵字參數(shù)allowRegexes和blockRegexes利用正則表達(dá)式字符串列表來確定PyInputPlus模塊的函數(shù)將接受或拒絕哪些內(nèi)容作為有效輸入。例如,使用inputNum()函數(shù)將接收羅馬數(shù)字以及常規(guī)數(shù)字作為有效輸入:
import pyinputplus as pyip
>>> response = pyip.inputNum(allowRegexes=[r'(I|V|X|L|C|D|M)+', r'zero'])
XLII
>>> response
'XLII'
我們還可以用blockRegexes關(guān)鍵字參數(shù)指定PyInputPlus模塊的函數(shù)不接收的正則表達(dá)式字符串列表:
import pyinputplus as pyip
>>> response = pyip.inputNum(blockRegexes=[r'[02468]$'])
42
This response is invalid.
43
>>> response
43
如果同時(shí)指定allowRegexes和blockRegexes參數(shù),那么允許列表將優(yōu)先于阻止列表。例如:
import pyinputplus as pyip
>>> response = pyip.inputStr(allowRegexes=[r'caterpillar', 'category'], blockRegexes=[r'cat'])
cat
This response is invalid
catastrophe
This response is invalid
category
>>> response
'category'
將自定義驗(yàn)證函數(shù)傳遞給inputCustom()
可以編寫函數(shù)以執(zhí)行自定義的驗(yàn)證邏輯,并將函數(shù)傳遞給inputCustom()。例如,我們可以創(chuàng)建自己的addsUpToTen()函數(shù),然后將其傳遞給inputCustom()。注意,函數(shù)調(diào)用看起來像inputCustom(addsUpToTen),而不是inputCustom(addsUpToTen()),因?yàn)槲覀兪菍ddsUpToTen()函數(shù)本身傳遞給inputCustom(),而不是調(diào)用addsUpToTen()函數(shù)并傳遞其返回值:
import pyinputplus as pyip
def addsUpToTen(numbers):
numbersList = list(numbers)
for i,digit in enumerate(numersList):
numbersList[i] = int(digit)
if sum(numbersList) != 10:
raise Exception('The digits must add up to 10,not %s. ' %(sum(numbersList)))
return int(number)
>>> response = pyip.inputCustom(addsUpToTen)
123
The digit must add up to 10,not 6.
55
>>> response
55
inputCustom()函數(shù)還支持常規(guī)的PyInputPlus功能,該功能可通過blank、limit、timeout、default、allowRegexes和blockRegexes關(guān)鍵字參數(shù)實(shí)現(xiàn)。
原文鏈接:https://blog.csdn.net/tangya3158613488/article/details/125031264
相關(guān)推薦
- 2022-12-05 Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題_python
- 2023-04-12 python中l(wèi)ist.copy方法用法詳解_python
- 2022-06-14 GO語言結(jié)構(gòu)體面向?qū)ο蟛僮魇纠齙Golang
- 2022-06-18 C語言中main函數(shù)與命令行參數(shù)詳細(xì)講解_C 語言
- 2022-09-01 基于MFC實(shí)現(xiàn)類的序列化詳解_C 語言
- 2022-04-05 Go語言空結(jié)構(gòu)體詳解_Golang
- 2023-04-02 Flutter應(yīng)用Windows平臺(tái)接入實(shí)踐詳解_C 語言
- 2023-03-16 Python庫(kù)functools示例詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支