2013-10-11 44 views
0

我使用QRegExValidator驗證QLineEdit時出現問題。它應該只是在第一個和最後一個名字之間加一個空格。我幾乎跟着例子在這裏:對QLineEdit使用QRegExValidator

http://doc.qt.digia.com/4.6/qregexpvalidator.html

代碼編譯,我可以運行PROGRAMM但我不能輸入任何字母到lineedit領域。爲什麼?

QString name_rx = "[A-z]+\\S[A-z]+"; 
QRegExp rx; 
QValidator *validator = new QRegExpValidator(rx, this); // this means mainwindow 

rx.setPattern(name_rx); 
ui->nameEdit->setValidator(validator); 
ui->nameEdit->setMaxLength(32); 

這是檢查輸入字段所需的全部嗎?

+0

當你寫信具有因它不匹配的正則表達式了,也是一個空格小寫'\\ s' –

回答

2

兩個小問題...

QString name_rx = "([A-Z]|[a-z])+\\s([A-Z]|[a-z])+";// Note, \\s not \\S 
QRegExp rx; 
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator 

另一種可以接受的方法是:

QString name_rx = "[a-z]+\\s[a-z]";// Note, \\s not \\S 
QRegExp rx; 
rx.setCaseSensitivity(Qt::CaseInsensitive); 
rx.setPattern(name_rx);// Note, happens BEFORE use in the validator 

這裏,它被添加到校驗

QValidator *validator = new QRegExpValidator(rx, this); // this means mainwindow 

ui->nameEdit->setValidator(validator); 
ui->nameEdit->setMaxLength(32); 

也是一個好榜樣什麼工作,看看這個網頁:

http://doc.qt.digia.com/4.6/tools-settingseditor-variantdelegate-cpp.html

它具有所有的這些例子專門爲使用QRegExQRegExValidator本着編輯:

boolExp.setPattern("true|false"); 
boolExp.setCaseSensitivity(Qt::CaseInsensitive); 

byteArrayExp.setPattern("[\\x00-\\xff]*"); 
charExp.setPattern("."); 
colorExp.setPattern("\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)"); 
doubleExp.setPattern(""); 
pointExp.setPattern("\\((-?[0-9]*),(-?[0-9]*)\\)"); 
rectExp.setPattern("\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)"); 
signedIntegerExp.setPattern("-?[0-9]*"); 
sizeExp = pointExp; 
unsignedIntegerExp.setPattern("[0-9]*"); 

dateExp.setPattern("([0-9]{,4})-([0-9]{,2})-([0-9]{,2})"); 
timeExp.setPattern("([0-9]{,2}):([0-9]{,2}):([0-9]{,2})"); 
dateTimeExp.setPattern(dateExp.pattern() + "T" + timeExp.pattern()); 

希望有所幫助。

+0

工作華麗謝謝 –

+0

An ['[Az] +'不僅符合字母](http://stackoverflow.com/questions/29771901 /爲什麼 - 是 - 這個正則表達式,允許-A-插入符/ 29771926#29771926)。 –

+0

@WiktorStribiżew良好的通話。它看起來也會從A(65)到z(122)的ascii表上得到'[\]^_'''。我會盡快提供一個替代表達。 – phyatt

0

你的模式匹配(例如)此字符串

a\Sa 

那就是必須有一個文字\和名之間的大寫字母S上。 我使用非常方便的例子正則表達式嘗試,你可以找到它與QtCreator發佈的標準實例(按Ctrl + 1,然後在搜索欄中輸入正則表達式...)

enter image description here