gpt4 book ai didi

python - 如何在python中验证用户输入的格式是否正确

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:59 25 4
gpt4 key购买 nike

我正在尝试用 python 编写脚本,我需要验证用户输入的格式是否正确,例如 000.000 或 00.0 或 IP 前 2 段的任何其他组合(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)。这也可以表示为过于复杂的正则表达式。

编辑:我草率的阅读以某种方式跳过了“前两段”。我想这样做的一种方法是为此检查附加 ".0.0",尽管这仍然允许一个或两个段。

正则表达式不是绑定(bind)检查数字的理想选择。例如,从 0 到 255 的非零前缀十进制数可能是 \d|[1-9]\d|1\d\d|2[0-4]\d|25[0- 5]。现在考虑一下,对于代码的下一位读者来说,不仅包含至少两个这样的组的正则表达式要检查什么,而且它正确地完成了检查,这将是多么清楚。

关于python - 如何在python中验证用户输入的格式是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57231015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com