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