In this example you have to validate if a user input string is alphanumeric. The given >string is not nil/null/NULL/None, so you don't have to check that.
The string has the following conditions to be alphanumeric:
At least one character ("" is not valid)
Allowed characters are uppercase / lowercase latin letters and digits from 0 to 9
No whitespaces / underscore
題目理解:設計一個函式檢驗字串password是否符合規則並返還布林值,題目要求僅允許出現大寫的英文字母與數字,空字串亦視為False。
Day3 中曾提到過,若一個字元其upper()與lower()過後的值相同,代表並非英文字母,故可利用此特性對密碼中字元做篩選。
針對剩下字元利用python中的int()函式來嘗試將某字串轉化為Int屬性,若能成功轉換代表該字元為數字。
但若不能轉換時可能會直接出現程式報錯的情形:
print(int(12)) #輸出:12
print(int("__")) #ValueError: invalid literal for int() with base 10: '__'
此時可以使用python中的try & excpet寫法,來使程序能繼續正常執行。
try:
int("+=&") #嘗試執行try範圍下的程式碼,若發現錯誤則執行except內程式碼
except:
print("檢驗到無法轉化屬性成Int之字元")
故可以將int()放入try內檢驗,若程序檢驗到出錯則透過except返還False,如下:
def alphanumeric(password):
#空字串直接回傳False
if password == "":
return False
for character in password:
#逐一檢查字符,若character的upper() & lower()相等,說明改變大小寫結果相同故為非字母字元
if character.upper() == character.lower():
try:
#嘗試執行類別轉換,若可轉換為Int說明character為數字
int(character)
except:
#檢測到無法轉換則立即返還False
return False
return True