繁体   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