alp*_*ric 2 python regex validation pyqt
刚刚遇到一行代码,强制用户的文本输入到对话框的字段中.无论输入如何,最终只允许使用IP格式,例如:
123.456.789.100
regexIP=QtCore.QRegExp("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
Run Code Online (Sandbox Code Playgroud)
我想为lineedit验证器编写一个正则表达式,它将使用下划线自动替换所有空格,逗号,句点,短划线,减号,美元符号(除字母和数字之外的所有内容).我还想将前三个字母大写,然后在它们之后插入一个下划线,而不管用户输入什么.
例如,如果用户键入:
this is a beautiful day 77
Run Code Online (Sandbox Code Playgroud)
正则表达式验证器会自动将其更改为:
THI_Sis_a_beatiful_day_77
Run Code Online (Sandbox Code Playgroud)
她是PyQt部分代码的样子:
my_regex = QtCore.QRegExp("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
my_QLineEdit = QtGui.QLineEdit()
my_validator = QtGui.QRegExpValidator(my_regex, my_QLineEdit)
my_QLineEdit.setValidator( my_validator )
Run Code Online (Sandbox Code Playgroud)
再一次,上面的代码只是一个例子.我想要的是写一个正则表达式表达式将其放在括号内:
my_regex = QtCore.QRegExp(my_regex_expression_goes_here)
此my_regex表达式将强制该用户永远不会在文本字段(lineedit)中输入white_space,句点,逗号,美元符号.理想情况下,我想将前三个字母大写,然后加下下划线.但这不再是一件大事了.让我们专注于如何实现一些基本的正则表达式,这样用户就无法放置空格,减号,美元符号等.只允许使用字母和数字....
该QRegExpValidator课程并不适合您的用例.
相反,您应该子类化QValidator并重新实现其validate方法以获得所需的行为.
下面的脚本提供了一个基本演示.它自动将前三个字母大写,并插入下划线(如有必要).此外,所有非字母数字字符都会自动替换为下划线.如果您希望用单个下划线替换非字母数字字符,请在正则表达式的末尾添加"+".粘贴的文本也将自动转换.
import sip, re
sip.setapi('QString', 2)
from PyQt4 import QtCore, QtGui
class Validator(QtGui.QValidator):
def __init__(self, parent=None):
super(Validator, self).__init__(parent)
self._replace = re.compile(r'[^A-Za-z0-9]').sub
def validate(self, string, pos):
string = self._replace('_', string)
prefix = string[:3].upper()
if len(string) > 3 and not string[3] == '_':
prefix += '_'
pos += 1
string = prefix + string[3:]
return QtGui.QValidator.Acceptable, string, pos
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.edit = QtGui.QLineEdit(self)
self.validator = Validator(self)
self.edit.setValidator(self.validator)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 500, 100)
window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |