簡體   English   中英

如何在python中驗證用戶輸入的格式是否正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM