python - IP 地址的 Tkinter 条目验证
问题描述
我使用 Tkinter 条目将 IPv4 地址作为用户的输入,我更喜欢使用小部件的 validatecommand 属性,它只允许格式为 XXX.XXX.XXX.XXX 的条目,即 X 位。
问题可以通过 re 模块与表达式匹配条目来解决 ^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$ 但我会喜欢提前做。
我尝试使用 ipaddress 模块如下:
import tkinter as tk
import ipaddress as ip
import re
def validate(value):
if ip.ip_address(value):
return True
return False
window = tk.Tk()
tk.Label(window, text = "IP", font = 'Arial 10 bold').grid(row = 0, column = 0, padx = 5, pady = 5, sticky = 'ew')
varip = tk.StringVar()
vcmd = window.register(validate)
ipadd = tk.Entry(window, textvariable = varip, width = 23, validate = 'key', validatecommand = (vcmd, '%P'))
ipadd.grid(row = 0, column = 1, padx = 5, pady = 5)
window.mainloop()
问题是只有引入的第一个字符被检查为 IPv4 地址,并且允许所有字符,而不仅仅是数字和点。
怎么可能做到?
解决方案
如果您在验证时遇到问题Ipv4
,可以在代码中添加以下逻辑。我有一个需要验证tkinter
的类似程序。这对我有用。Ipv4
import re
# Make a regular expression
# for validating an Ip-address
regex = '''^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)'''
# Define a function for
# validate an Ip addess
def check(Ip):
# pass the regular expression
# and the string in search() method
if(re.search(regex, Ip)):
print("Valid Ip address")
else:
print("Invalid Ip address")
# Driver Code
if __name__ == '__main__' :
# Enter the Ip address
Ip = "192.168.0.1"
# calling run function
check(Ip)
Ip = "110.234.52.124"
check(Ip)
Ip = "366.1.2.2"
check(Ip)
推荐阅读
- linux - 这个功能怎么做?(这个功能叫什么名字?)
- java - Maven Release Plugin 自增自定义格式版本
- macos - 钥匙串中的 macOS 安装程序证书评估错误:无效的扩展密钥用法
- api - 跨多个无状态 API 应用程序的用户管理
- python - 如何抓取谷歌搜索结果页面?
- javascript - Vue插件,添加获取数据的全局组件
- c# - 计算日期时间列表中的总分钟数
- google-cloud-dataflow - 谷歌数据流 CombineFn add_input 失败
- android - 在 docker 中确定操作系统类型
- openlayers - 样式化草图点