2014-03-25 63 views
2

我需要一個QLineEdit,它必須表示一個範圍。 FE(1,2),對於這種表示我想設置一個驗證檢查器,以便用戶不寫其他符號。 在這種情況下,我有char + int + char + int + char,如下面的示例所示: Qt有任何功能來處理這個問題? 在此先感謝。如何限制QLineEdit中的表達式

+0

示例如下: (2,5] –

+0

在我看來,不允許鍵入一些字符的輸入字段是一個可怕的想法(接近於在鼠標指針內捕捉鼠標移動)。請注意,許多用戶不能在不查看鍵盤的情況下鍵入內容,因此他們將鍵入禁止輸入的字符,稍後他們會驚訝地發現它們不存在,重新輸入整個內容(仍不看屏幕)。如果內容無效,則更好的方法是在靠近該字段的地方顯示一條消息。 – 6502

回答

1
QRegExp expr("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$"); 

這就是我想要的!我必須允許多於一個前導0-s。

1

這是不可能寫一個正則表達式接受只有有效的範圍,原因是你可以檢查語法,但不是數值(除非e正則表達式引擎有一些擴展)。

[1234,5678) 

之間的差
[5678,1234) 

不在語法中(正則表達式是什麼),但是在語義(正則表達式不那麼強大)中。

對於檢查只是語法的正則表達式可能是

\[\d+,\d+\) 

,或者,如果你也允許其他類型的區間邊界條件:

[\[)]\d+,\d+[\])] 
+0

我不想接受有效的範圍,我想接受有效的語法。 這意味着char int char int字符 –

0

我會建議不要讓所有的字符,但只有需要的。例如:

QRegExp("[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]"); 

我會解釋:

[]這些包含您的字符的字符配套配件:\\(這實際上是匹配\標誌,因爲你需要一次逃脫它爲您定期Expression \和Qt String再次使它成爲\\),\(用於左括號等),您可以添加所有您想要匹配的字符,一個很好的幫助是這個正則表達式備忘錄

\ d匹配一個數字,如果您想要有多個數字,您可以使用\ d +至少一個或\ d {3}精確3位數字(+ 1或更多,?0或1, * 0或更多)

另一個例子是:對於具有中心字符是一個

QRegExp("[\\\\\\(\\)\\{\\}]\\d[,\\.]\\d[\\\\\\(\\)\\{\\}]"); 

。或一個標誌。

4

您可以使用Qt的Input Validator功能來實現此目標。

以下片段將限制您在指定的行編輯上的輸入。

QRegExp re("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$"); 
QRegExpValidator *validator = new QRegExpValidator(re, this); 
ui->lineEdit->setValidator(validator); 

編輯 更新的正則表達式

+0

在這種情況下,我可以寫入00000,2222,但是您不能允許多寫一個前導0.正確的是「^ [[,(){1,1}(0 | [1-9] {1,1} [0-9] {0,9})[,] {1,1}(0 | [1-9] {1,1} [0-9] {0, 9})[],)] {1,1} $「 –

+0

您是否需要稍後刪除驗證程序? –

+0

@TomášZato它沒有顯示在代碼片段中,但「this」參數設置了* parent參數,當父類是QObject時它將啓用自動資源清除(請參閱http://stackoverflow.com/a/3902325/798377 ) –