QLineEdit输入按IP地址校验

gohome520 2011-10-27 08:32:38


QRegExp ipRegExp = QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){4}");
QRegExpValidator *ipRegExpValidator = new QRegExpValidator(ipRegExp, this);
ipLineEdit->setValidator(ipRegExpValidator);
ipLineEdit->setInputMask("000.000.000.000; ");


还能输入999.999.999.999,相当于正则表达式没有效果,只有mask启作用了。

但是如果把最后一行改成ipLineEdit->setInputMask("000.000.000.000;0");的话,则正则表达式就能起作用,就无法再输入999.999.999.999这种非法IP地址了。

这是什么原因,怎么才能把它改好呢?
...全文
1518 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xianitzph9 2013-03-27
  • 打赏
  • 举报
回复
方向都错了! 这就不是正则表达式能解决的。
xiangjie329 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yzhj2005 的回复:]

可以不使用setInputMask
下面代码可以解决你的ip输入问题,不会出现999.999.999.999的情况
QRegExp ipRx("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-4]|[01]?\\d\\d?)");
QRegExpValidator *pIpValidator = new QRegExpVali……
[/Quote]

这段代码似乎同样会出现999的情况啊,你的最后加个0倒是挺好用的
钱国正 2011-11-19
  • 打赏
  • 举报
回复
你这个正则表达式正确吗
lsxk 2011-11-18
  • 打赏
  • 举报
回复
楼主能不能给我发一个ip输入的demo,我按照你的方法还是解决不了。本人有点笨,呵呵。lsxkzh@163.com
gohome520 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yzhj2005 的回复:]

可以不使用setInputMask
下面代码可以解决你的ip输入问题,不会出现999.999.999.999的情况
QRegExp ipRx("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-4]|[01]?\\d\\d?)");
QRegExpValidator *pIpValidator = new QRegExpVali……
[/Quote]

我知道,现在也是这么用的。
但是没有windows中修改IP对话框的那种效果,而且一和setInputMask结合起来确实是不好用的。
yzhj2005 2011-11-09
  • 打赏
  • 举报
回复
可以不使用setInputMask
下面代码可以解决你的ip输入问题,不会出现999.999.999.999的情况
QRegExp ipRx("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-4]|[01]?\\d\\d?)");
QRegExpValidator *pIpValidator = new QRegExpValidator(ipRx,this);
m_leIP->setValidator(pIpValidator);//m_leIP = new QLineEdit(this);
JedyChen 2011-11-09
  • 打赏
  • 举报
回复
是个问题
gaoqiaoming 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 gohome520 的回复:]
C/C++ code

QRegExp ipRegExp = QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){4}");
QRegExpValidator *ipRegExpValidator = new QRegExpValidator(ipRegExp, this);
ipLineEdit->setValidator(ipRegExpValida……
[/Quote]

LZ,ipLineEdit->setInputMask("000.000.000.000;0");这样虽然能限制输入999.999.999.999这样的ip,但其实它把0给屏蔽掉了,输入不带0的ip没问题,如果输入168.100.101.010这样的ip,其实它读出来的是168.1.11.1这样的ip了。。。。。
gohome520 2011-11-07
  • 打赏
  • 举报
回复
呵呵,还是没找到原因,再看看吧。
largep 2011-10-30
  • 打赏
  • 举报
回复
你可以查一下4.7.4的文档关于这个是怎么描述的,这里给两个链接你看看或许有帮助
http://www.qtcn.org/bbs/simple/?t28473.html
https://bugreports.qt.nokia.com/browse/QTBUG-11324?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#issue-tabs
说明一下,第一个链接说setInputMask("000.000.000.000;0");//只要加上;0保证有默认值即可使得正则和mask同时生效。
第二个链接说的是QLineEdit, setInputMask() and setValidator()一直有bug,知道4.7.2才解决。
gohome520 2011-10-29
  • 打赏
  • 举报
回复
QT 4.7.4

mask字符串为setInputMask("000.000.000.000;_")还是限制不住,依然能输入999.999.999.999。
gohome520 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]

http://www.google.com.hk/#hl=zh-CN&source=hp&q=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F+IP%E5%9C%B0%E5%9D%80&oq=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F+IP%E5%9C%B0%E5%9D%80&……
[/Quote]
谢谢您的回复。

但似乎不是IP正则表达式的事吧。
相同的正则表达式,当mask字符串为setInputMask("000.000.000.000; ");就限制不住。
而当mask字符串为setInputMask("000.000.000.000;0");就能限制住。
largep 2011-10-28
  • 打赏
  • 举报
回复
4.4.3的assitant是这样解释的:
inputMask : QString
This property holds the validation input mask.
If no mask is set, inputMask() returns an empty string.
Sets the QLineEdit's validation mask. Validators can be used instead of, or in conjunction with masks; see setValidator().
Unset the mask and return to normal QLineEdit operation by passing an empty string ("") or just calling setInputMask() with no arguments.
The table below shows the characters that can be used in an input mask. A space character, the default character for a blank, is needed for cases where a character is permitted but not required.
后面举例:
Examples:

Mask Notes
000.000.000.000;_ IP address; blanks are _.

这样说明mask字符串为setInputMask("000.000.000.000;_")应该是这样才对,不知道你用的什么版本qt

gohome520 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwwcs59 的回复:]

验证IP地址正则表达式

^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$
[/Quote]

谢谢您的回复。

但是问题真不在正则表达式上。我想问的是,为什么两种mask字符串,一个能限制住,一个却限制不住。
法尔我给他 2011-10-28
  • 打赏
  • 举报
回复
验证IP地址正则表达式

^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$
课程亮点       本课程是PySide6零基础入门与项目实战视频教程,经过精心设计,分为十个章节,制作了141页ppt, 接近70个代码示例,主要讲解PySide6开发环境安装、基础控件与界面布局、项目实战,PySide6程序打包,安装包制作,安装卸载、更新,发布等知识。涵盖从基础概念到高级应用的全方位知识,旨在为你提供一条清晰、系统的学习之路。无论你是编程新手,还是希望深化对PySide6的了解,本课程都能满足你的需求。       教学环境:Win11 64bit、Python3.11、PyCharm、Anacoda。课程大纲第一章:基础篇 PySide6开发环境安装        从Anaconda环境配置开始,带你快速入门Win11/win10下PySide6、PyQt5开发环境的安装与配置,分别介绍PyCharm与VSCode如何配置PySide6,  以及Python AnaConda的基本用法,创建虚拟环境,安装python模块。第二章 控件与布局篇 PySide6常用控件与界面布局使用介绍        深入PySide6中的常用控件与界面布局技巧,通过丰富的实例,掌握PySide6的窗口、布局、控件等核心内容。主要介绍QLabel、QPushButton、QLineEdit、QCheckBox、QComboBox、QTextEdit、QTextBrowser、QListView与QListWidget、QStackedWidget、QTabWidget、QTableView等控件以及水平垂直布局,弹簧控件,栅格布局,表单布局。第三章 信号槽与事件机制       解锁PySide6的信号槽机制和事件处理技能,让你的应用更加灵活。详细介绍Qt自定义信号槽,跨窗口传递信号;Qt鼠标事件,键盘事件,组合事件,事件过滤。第四章 QMainWindow应用篇       详细介绍QMainWindow的使用,包括菜单栏、工具栏、状态栏和停靠窗口等。第五章 样式表qss与自定义控件        教你如何使用样式表美化应用界面,并创建独特的自定义控件。掌握这些技能后,学员将能够设计出既美观又功能丰富的用户界面。第六章 图表与曲线        引入pyqtgraph,展示如何在PySide6应用中绘制图表和动态曲线。第七章 数据库编程        带你进入数据库编程世界,使用sqlite3与PySide6结合,进行数据存储和管理。第八章 项目实战:高仿有道词典        通过一个高仿有道词典的项目,将所学知识融会贯通,实战演练。课程中将会接入翻译接口,开发一个属于自己的翻译软件。第九章 打包与部署       教你如何将PySide6项目打包成exe,并使用Inno Setup制作安装包,介绍软件更新、卸载策略,让你的应用轻松上线。第十章 课程总结        回顾整个课程的学习内容,巩固知识点,为进一步的学习和应用打下坚实的基础。教学特色       实战案例:每个章节都配备实战案例,让学习者在实践中深化理解。       代码资料全覆盖:提供全套课程代码资料下载,便于学习者随时查阅和复习。       高效学习路径:课程内容结构清晰,由浅入深,适合不同层次的学习者。       本课程提供全部代码与在线答疑。谁应该学习这个课程       对图形界面开发感兴趣的编程新手。       希望提升个人技能,进入或者深耕在GUI开发领域的开发者。       需要快速掌握PySide6进行项目开发的软件工程师。结语        通过本课程的学习,你不仅能掌握PySide6的核心技能,还能通过实战项目提升解决实际问题的能力,最终让你能独立完成专业的GUI应用开发。随着技术的深入,你将发现PySide6不仅仅是一个工具库,它开启的是一扇通往高效、美观应用开发的大门。        开始PySide6的学习之旅,让你的编程之路更加精彩!

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧