QT輸入框輸入限制整理(正則表達(dá)式限制)
在使用 輸入數(shù)值時(shí),經(jīng)常遇到限制其范圍的需要,比如角太陽(yáng)高度角范圍為[-90,90],經(jīng)度值范圍[-180,180],方位角范圍[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定數(shù)值輸入范圍,如使用QIntValidator限制整數(shù)的數(shù)值范圍:
1.只允許輸入字母和漢字:
QRegExp regExp; regExp.setPattern("[a-zA-Z0-9_\u4e00-\u9fa5\\w]+$"); QValidator * editName = new QRegExpValidator(regExp,ui->lineEdit); ui->lineEdit->setValidator(editName); ui->lineEdit->setMaxLength(10);
2.正則表達(dá)式限制 只允許輸入 浮點(diǎn)數(shù)
QRegExp rx("^(-?[0]|-?[1-9][0-9]{0,5})(?:\\.\\d{1,4})?$|(^\\t?$)");
3.使用正則表達(dá)式限制只能輸入數(shù)字
QRegExp rx("[0-9\.]+$"); QRegExpValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator);
4.使用正則表達(dá)式限制只能輸入IP地址
QRegExp rx = QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){4}"); QRegExpValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator); ui->lineEdit->setInputMask("000.000.000.000");
5. 限制 輸入 值范圍,此類直接限制不接收數(shù)字以外的輸入,setRange設(shè)置接收范圍
QDoubleValidator * pDouVld = new QDoubleValidator(this); pDouVld->setRange(0,1000000000000000000); ui->lePort->setValidator(pDouVld);
6.只要字符數(shù)字
QRegExpValidator *validator2 = new QRegExpValidator(QRegExp("[A-Za-z0-9]*"), this); ui->leId->setValidator(validator2);
7.整理常用 正則表達(dá)式
^(-?[0]|-?[1-9][0-9]{0,5})(?:\.\d{1,4})?$|(^\t?$) (^-?180$)|(^-?1[0-7]\d$)|(^-?[1-9]\d$)|(^-?[1-9]$)|^0$ ^-?(180|1?[0-7]?\d(\.\d+)?)$ ^-?(180|1?[0-7]?\d(\.\d{1,4})?)$ ^-?(90|[1-8]?\d(\.\d{1,4})?)$ 1. 式子中開(kāi)頭的^和結(jié)尾的$限定字符串的開(kāi)始和結(jié)尾; 2. "-?" 表示一個(gè)或0個(gè)負(fù)號(hào),這里面的問(wèn)號(hào)表示其前面的字符重復(fù)0次或1次; 3. 管道符“|”表示平行分組,比如后三個(gè),表示180或其它形式; 4. [1-9] 表示限定數(shù)字范圍為1到9,其余類似,如果是有限幾個(gè)值,還可以用枚舉的方式,比如限定-255到255時(shí),第一個(gè)數(shù)字2的限定,應(yīng)該表達(dá)為[1,2],這表示這個(gè)位置只允許是1或者2; 5. "\d"是一個(gè)轉(zhuǎn)義字符,表示匹配一位數(shù)字; 6. “\.” 表示匹配小數(shù)點(diǎn); 7. "\d+",這里面的+表示其前面的\d重復(fù)一次或多次; 8. "\d{1,4}",里面的{1,4}表示重復(fù)1到4次;
8. 正則表達(dá)式語(yǔ)法:
:匹配任何單個(gè)字符。例如正則表達(dá)式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。 [ ] :匹配括號(hào)中的任何一個(gè)字符。例如正則表達(dá)式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug??梢栽诶ㄌ?hào)中使用連字符“-”來(lái)指定字符的區(qū)間來(lái)簡(jiǎn)化表示,例如正則表達(dá)式[0-9]可以匹配任何數(shù)字字符,這樣正則表達(dá)式“a[0-9]c”等價(jià)于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;還可以制定多個(gè)區(qū)間,例如“[A-Za-z]”可以匹配任何大小寫(xiě)字母,“[A-Za-z0-9]”可以匹配任何的大小寫(xiě)字母或者數(shù)字。 ( ) :將 () 之間括起來(lái)的表達(dá)式定義為“組”(group),并且將匹配這個(gè)表達(dá)式的字符保存到一個(gè)臨時(shí)區(qū)域,這個(gè)元字符在字符串提取的時(shí)候非常有用。把一些字符表示為一個(gè)整體。改變優(yōu)先級(jí)、定義提取組兩個(gè)作用。 | :將兩個(gè)匹配條件進(jìn)行邏輯“或”運(yùn)算。'z|food' 能匹配"z" 或 "food"。'(z|f)ood' 則匹配"zood" 或 "food"。 *:匹配0至多個(gè)在它之前的子表達(dá)式,和通配符*沒(méi)關(guān)系。例如正則表達(dá)式“zo*”能匹配 “z” 、“zo”以及 “zoo”;因此“.*”意味著能夠匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括號(hào)改變優(yōu)先級(jí))。 + :匹配前面的子表達(dá)式一次或多次,和*對(duì)比(0到多次)。例如正則表達(dá)式9+匹配9、99、999等。 “zo+”能匹配 “zo”以及 “zoo” ,不能匹配"z"。 ? :匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 或"does" 。一般用來(lái)匹配“可選部分”。 {n} :匹配確定的 n 次。"zo{2}"→zoo。例如,“e{2}” 不能匹配“bed”中的“e”,但是能匹配“seed”中的兩個(gè)“e”。 {n,} :至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。 {n,m} :最少匹配 n 次且最多匹配 m 次。“e{1,3}”將匹配“seeeeeeeed”中的前三個(gè)“e”。 ^(shift+6) :匹配一行的開(kāi)始。例如正則表達(dá)式“^regex”能夠匹配字符串“regex我會(huì)用”的開(kāi)始,但是不能匹配“我會(huì)用regex”。 ^另外一種意思:非?。〞簳r(shí)不用理解) $ :匹配行結(jié)束符。例如正則表達(dá)式“浮云$” 能夠匹配字符串“一切都是浮云”的末尾,但是不能匹配字符串“浮云呀” \d:代表一個(gè)數(shù)字,等同于[0-9] \D:代表非數(shù)字,等同于[^0-9] \s:代表?yè)Q行符、Tab制表符等空白字符 \S:代表非空白字符 \w:匹配字母或數(shù)字或下劃線或漢字,即能組成單詞的字符 \W:非\w ,等同于[^\w] d:digital;s:space、w:word。大寫(xiě)就是“非” Regex.IsMatch("bbbbg","^b.*g$"); Regex.IsMatch("bg","^b.*g $ "); Regex.IsMatch("gege","^b.*g $ "); "^\d{3,4}\-?\d+$"表示被匹配的字符序列應(yīng)該是由三至四位數(shù)字組成,由于長(zhǎng)途區(qū)號(hào)的連字符“-”可有可無(wú),所以這里使用“?”元字符進(jìn)行說(shuō)明。由于連字符“-”在正則表達(dá)式中有特殊含義(表示范圍,比如[0-9]),所以要對(duì)其進(jìn)行轉(zhuǎn)義。 []括號(hào)中的任意字符,\w字母、數(shù)字、下劃線,+一到多個(gè)。由于.在正則表達(dá)式中有特殊的含義,因此對(duì)于真正想表達(dá)“.”則需要轉(zhuǎn)移“\.”。先想正則表達(dá)式是語(yǔ)言無(wú)關(guān)的。 +、*的匹配默認(rèn)是貪婪(greedy)的:盡可能多的匹配,直到“再貪婪一點(diǎn)兒”其后的匹配模式就沒(méi)法匹配為止。 在+、*后添加?就變成非貪婪模式(? 的另外一個(gè)用途):讓其后的匹配模式盡早的匹配。修改成"我是(.+?)。" 圖片src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\') 中文 ^([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)$ 網(wǎng)址"\<a.+?href=['""](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^'"">]+?)[^>]*?\>" 匹配中文字符的正則表達(dá)式:[\u4e00-\u9fa5] 匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff] 匹配空行的正則表達(dá)式:\n[\s|]*\r 匹配HTML標(biāo)記的正則表達(dá)式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)(像vbscript那樣的trim函數(shù)) 匹配Email地址的正則表達(dá)式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配網(wǎng)址URL的正則表達(dá)式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
總結(jié)
到此這篇關(guān)于QT輸入框輸入限制整理的文章就介紹到這了,更多相關(guān)QT輸入框輸入限制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言嵌入式實(shí)現(xiàn)支持浮點(diǎn)輸出的printf示例詳解
這篇文章主要為大家介紹了C語(yǔ)言嵌入式實(shí)現(xiàn)支持浮點(diǎn)輸出的printf示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01C++生成隨機(jī)數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++生成隨機(jī)數(shù)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04C++數(shù)據(jù)結(jié)構(gòu)二叉搜索樹(shù)的實(shí)現(xiàn)應(yīng)用與分析
從這篇博客開(kāi)始,我就要和大家介紹有關(guān)二叉搜索樹(shù)的知識(shí),它還衍生出了兩棵樹(shù)——AVL樹(shù)和紅黑樹(shù),在后面兩篇博客我都會(huì)介紹。今天先從二叉搜索樹(shù)開(kāi)始引入2022-02-02c++之移動(dòng)構(gòu)造函數(shù)或者移動(dòng)賦值運(yùn)算符的作用詳解
文章介紹了移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值運(yùn)算符的核心作用,它們通過(guò)資源管理權(quán)轉(zhuǎn)移的方式實(shí)現(xiàn)對(duì)象的構(gòu)造,減少內(nèi)存拷貝的開(kāi)銷,移動(dòng)構(gòu)造函數(shù)的參數(shù)一定是一個(gè)右值引用2025-03-03c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)
下面小編就為大家?guī)?lái)一篇c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09深入剖析設(shè)計(jì)模式中的組合模式應(yīng)用及在C++中的實(shí)現(xiàn)
這篇文章主要介紹了設(shè)計(jì)模式中的組合模式應(yīng)用及在C++中的實(shí)現(xiàn),組合模式可以清晰地反映出遞歸構(gòu)建樹(shù)狀的組合結(jié)構(gòu),需要的朋友可以參考下2016-03-03