[英]How to verify that user input is in the correct format in python
我正在嘗試在python中創建一個腳本,我需要驗證用戶輸入的格式是否正確,如000.000或00.0或IP的前兩個段的任何其他組合(0可以是任何數字)。
我嘗試過使用元字符“|” 和re模塊中的特殊序列“\\ d”進行所有可能的組合,但現在即使輸入類似14576.2345的內容,它也被標記為正確的用戶輸入。
import re
ip_class = input("Enter ip class: ")
def ip_range(ip_start):
pattern= r"(\d+\d+\d+.+\d+\d+\d|\d+\d+.+\d+\d|\d+.+\d|\d+\d+\d+.+\d+\d|\d+\d+\d+.+\d|\d+\d+.+\d+\d+\d|\d+.+\d+\d+\d|\d+\d+.+\d|\d+.+\d+\d)"
match = re.match(pattern, ip_start)
if match:
print ("it works")
else:
print ("it doesnt work")
ip_range(ip_class)
我希望如果我輸入的東西不能是像234534.1345這樣的ip的前2段,它會說“它不起作用”,但它說“它有效”它說它適用於每個至少3個的數字即使沒有句號,數字也很長。
import socket
somestr = '123.0xe0f'
try:
addr = socket.inet_aton(somestr)
except OSError as e:
raise # String was not an inet address
在這種情況下,檢查失敗要比猜測容易得多。 可能會有比您預期的更多有效格式。 還有.
是正則表達式中的通配符。
如果你想特別使用四點式表示法socket.inet_pton(socket.AF_INET, somestr)
你也可以使用socket.inet_pton(socket.AF_INET, somestr)
。 這也可以表達為過於復雜的正則表達式。
編輯:我的草率閱讀以某種方式跳過“前2段”。 我想一種方法是為此檢查附加".0.0"
,但仍允許一個或兩個段。
正則表達式不適合綁定的檢查號碼。 例如,從0到255的非零前綴十進制數可能是\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]
。 現在考慮對代碼的下一個讀者有多清楚,不僅是包含至少兩個這樣的組的正則表達式要檢查的內容,而且還要正確地執行它。
在這里。
import re
ip_class = input("Enter ip class: ")
def ip_range(ip_start):
pattern= r"(\d{3}.\d{3})"
match = re.match(pattern, ip_start)
if match:
a = ip_class.split(".")
for b in a:
if int(b) not in range(0,256):
print ("it doesnt work")
return
print ("it works")
else:
print ("it doesnt work")
ip_range(ip_class)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.