实现要求:编辑框输入的内容为中文6位和英文12位
实现思路:使用正则表达式,设置编辑框的验证器setValidator
"""主要代码段"""
QlineEdit.setValidator(QRegExpValidator(QRegExp("正则表达式"),self))
^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串
当在一组方括号里使用 ^ 时,^表示"非"或"排除"的意思,用来剔除某个字符。
如:^[^0-9][0-9]$ 表示第一个字符不能是数字,第二个是数字
此处主要使用到的正则表达式:
由26个英文字母组成的字符串:^[A-Za-z]+$
汉字:^[\u4e00-\u9fa5]{0,}$
双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
以下是完整测试代码:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class regex_qlineEdit(QWidget):
def __init__(self):
super().__init__()
self.uiinit()
def uiinit(self):
self.setFixedSize(1200, 700)
self.regx_edit = QLineEdit(self)
self.regx_edit.resize(500,100)
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("[A-Za-z][1-9][0-9]{0,2}"),self))#设置验证器
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("[a-zA-Z0-9]+${5}"),self))#设置验证器
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("[0-9]*$"),self))#输入数字,没有限制位数
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("[0-9]{12}"),self))#最多只能输入12位数字
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("^[\u4e00-\u9fa5]{0,}$"),self))#输入汉字
# self.regx_edit.setValidator(QRegExpValidator(QRegExp("^[\u4e00-\u9fa5]{6}"),self))#输入汉字,限制6
self.regx_edit.setValidator(QRegExpValidator(QRegExp("^[\u4e00-\u9fa5]{6}&|^[a-zA-Z]{12}&"),self))#输入汉字6个,英文输入12个
if __name__ == "__main__":
app = QApplication(sys.argv) # 创建一个应用程序
wid = regex_qlineEdit()
wid.show()
sys.exit(app.exec()) # 开始执行应用程序,并进入消息循环,调用程序并转移进程
总结:
^[\u4e00-\u9fa5]{6}&|^[a-zA-Z]{12}&
^起始符号
$结束符号
^[匹配内容]{位数限制}$
如:^[\u4e00-\u9fa5]{0,}$ 不限制输入中文
如:^[\u4e00-\u9fa5]{6}$ 限制输入6位中文
|或运算的使用
^[\u4e00-\u9fa5]{6}&|^[a-zA-Z]{12}& 限制输入6位中文或12位英文