亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何使用正則表達(dá)式對(duì)輸入數(shù)字進(jìn)行匹配詳解

 更新時(shí)間:2022年10月09日 10:50:33   作者:sanjin0126  
正則表達(dá)式用于字符串處理、表單驗(yàn)證等場(chǎng)合,實(shí)用高效,下面這篇文章主要給大家介紹了關(guān)于如何使用正則表達(dá)式對(duì)輸入數(shù)字進(jìn)行匹配的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下

前言:

最近有一個(gè)區(qū)間范圍限制,一般255數(shù)字以下的都能在網(wǎng)上薅到,但是需要弄一個(gè)int16、int32、int64范圍的輸入限制......在網(wǎng)上逛了很久都沒(méi)找到,基本都是從0開(kāi)始教學(xué)那種,我又不想看,覺(jué)得寫的范圍太大了,我就單純的對(duì)數(shù)字進(jìn)行校驗(yàn),最終還是研究了一點(diǎn)點(diǎn),先說(shuō)說(shuō)自己的理解,0如有覺(jué)得不對(duì)的地方或者還有更簡(jiǎn)單的方法,請(qǐng)大佬踢我一jio

正文:

下面會(huì)使用到一些元字符,邊做邊解釋。

舉例:做一個(gè)int8的輸入限制,也是就是需要將輸入框的限制設(shè)置在(-128 ~ 127)

先說(shuō)0~127的限制范圍:

首先需要先寫 ^ $ 兩個(gè)元字符,這兩個(gè)的意思就是開(kāi)始與結(jié)束的字符串搭配。如匹配 0~5的整數(shù)字符串,則就是 ^ [0-5]$ (中括號(hào)為字符范圍,匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫字母字符)。

那如果是 0~15呢,15就是兩個(gè)字符,需要從右邊往左拆分,當(dāng)?shù)谝晃粩?shù)字為1時(shí),第二位數(shù)值的取值范圍就只能是0~5,所以出現(xiàn)了第一種組合方式 1[0-5],當(dāng)?shù)谝晃粸?時(shí),也就是不顯示十位,只存在個(gè)位數(shù),那么第二種組合方式就是[0-9],結(jié)合第一種和第二種的組合方式,^(1[0-5]|[0-9])$ 中間的|符號(hào)可以理解為或運(yùn)輸,就是既可以匹配1[0-5]的數(shù)字,也可以匹配[0-9]的數(shù)字,圓括號(hào)可以理解為一個(gè)組合。此處使用Qt測(cè)試代碼為:

因?yàn)樵址校?/p>

\d

匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。

所以此處的 "^(1[0-5]|[0-9])$" 組合方式可以縮寫成 "^(1[0-5]|\d)$",因?yàn)樵赒t中使用\d好像被識(shí)別成轉(zhuǎn)義字符了,提示如下面一樣:

所以需要將 \d 寫成 \\d ,即為  "^(1[0-5]|\\d)$"

 那么,至此 0~15 整數(shù)的正則表達(dá)式就寫完了,如果我們這里需要寫  -15~15 的取值范圍又該怎么弄呢? 一樣的只需要將 0~15照著抄過(guò)來(lái)就行。先寫成"^((-1[0-5]|\\d)|(1[0-5]|\\d))$",大家會(huì)發(fā)現(xiàn)我寫了兩次0~15的取值范圍,中間用到了“|”或運(yùn)算符,在最左側(cè)加了一個(gè)“-”負(fù)號(hào),給人的感覺(jué)好像是-15~15,但是這里左側(cè)的取值范圍存在0的情況,也就是左邊的會(huì)出現(xiàn) -0 的匹配,是因?yàn)樽筮叺?\\d包含了 0~9的數(shù)字,這里面包含了0,所以我們不想要這種情況的出現(xiàn),只需要將左邊的 \\d改為 [1-9]就可以啦,所以-15~15 的匹配方式為 "^((-1[0-5]|[1-9])|(1[0-5]|\\d))$"

當(dāng)然這只是我的簡(jiǎn)單理解,可能會(huì)存在更好的方式,避免左右兩側(cè)重復(fù)的匹配字符串太多,而又做不到復(fù)用的情況,也請(qǐng)大佬指出。

最后我們要來(lái)匹配一個(gè) int16的取值范圍,因?yàn)閕nt16的范圍為整數(shù) -32768 ~ 32767,所以我們一開(kāi)始還是先寫右邊 0~32767的范圍,因?yàn)閷懗隽擞疫吅螅?2767),再將左邊( -32768)加個(gè)符號(hào),對(duì)左邊的個(gè)位數(shù)情況(-0)做出處理,就可以啦。

首先0~32767 當(dāng)前面為3276時(shí),個(gè)位數(shù)只能匹配 0~7 : 3276[0-7]

0~32767 當(dāng)前面為327時(shí),后兩位只能匹配 小于60的數(shù)字,也就是0~59,即個(gè)位數(shù)匹配 0~9,十位數(shù)匹配 0~5 : 327[0-5][0-9]  或則 327[0-5]\\d

0~32767 當(dāng)前面為32時(shí),后三位只能匹配 小于700的數(shù)字,也就是0~699,即個(gè)位數(shù)匹配 0~9,十位數(shù)匹配 0~9,百位數(shù)匹配 0~6 : 32[0-6][0-9][0-9]  或則 32[0-6]\\d\\d  也可以簡(jiǎn)寫成 32[0-6]\\d{2}  花括號(hào)為前面一個(gè)字符重復(fù)的次數(shù),這里也就是\\d必須要重復(fù)2次。下面是花括號(hào)的使用講解。

{n}

n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。

{n,}

n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。

{n,m}

m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。

0~32767 當(dāng)前面為3時(shí),后四位只能匹配 小于2000的數(shù)字,也就是0~1999,即個(gè)位數(shù)匹配 0~9,十位數(shù)匹配 0~9,百位數(shù)匹配 0~9,千位數(shù)匹配0~1 : 3[0-1][0-9][0-9][0-9]  或則 3[0-1]\\d\\d\\d  也可以簡(jiǎn)寫成 3[0-1]\\d{3}。

0~32767 當(dāng)存在5位數(shù)字,也就是輸入數(shù)字為萬(wàn)位的時(shí)候,那么現(xiàn)在萬(wàn)位只能存在1~2(因?yàn)?已經(jīng)在前面匹配過(guò)來(lái),這里不需要繼續(xù)匹配3的情況了),后四位就可以全匹配0~9,因?yàn)橹灰嬖?個(gè)數(shù),且萬(wàn)位數(shù)字又是1~2的范圍內(nèi),所以個(gè)位、十位、百位、千位再大也不可能會(huì)超過(guò)30000的 ,即個(gè)位數(shù)匹配 0~9,十位數(shù)匹配 0~9,百位數(shù)匹配 0~9,千位數(shù)匹配0~9 : [1-2][0-9][0-9][0-9][0-9]  或則 [1-2]\\d\\d\\d\\d  也可以簡(jiǎn)寫成 [1-2]\\d{4}。

0~32767 當(dāng)存在4位數(shù)字,也就是輸入數(shù)字為千位的時(shí)候,那么現(xiàn)在千位就能存在1~9,后面的百位、十位、個(gè)位的取值情況可以為0~9,即千位存在[1-9]\\d\\d\\d,百位存在[1-9]\\d\\d,十位位存在[1-9]\\d,(這里個(gè)位為一個(gè)數(shù)字的情況,留到最后處理)這么組合下來(lái)就是 [1-9]\\d\\d\\d|[1-9]\\d\\d|[1-9]\\d,這樣匹配沒(méi)有問(wèn)題,但是展示不太好,所以這里用到花括號(hào)簡(jiǎn)寫為:  [1-9]\\d{1,3}  花括號(hào)1~3的意思就是匹配\\d至少一次,最多3次。

0~32767 當(dāng)只存在1位數(shù)字,也就是只輸出個(gè)位的時(shí)候,即\\d或者[0-9]。

所以結(jié)合上面的匹配結(jié)果  0~32767的匹配公式為

"^(3276[0-7]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{1,3}|\\d)$"

那么同理-32768 ~ -1,因?yàn)椴淮嬖?0的情況,而前面0~32767已經(jīng)匹配了0,所以此處只匹配到-1。即:

"^-(3276[0-8]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{0,3})$"

那么-32768 ~ 32767的匹配公式,也就是int16的匹配公式為

"^(-(3276[0-8]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{0,3})|(3276[0-7]|327[0-5]\\d|32[0-6]\\d{2}|3[0-1]\\d{3}|[1-2]\\d{4}|[1-9]\\d{1,3}|\\d))$"

同理,int32(-2147483648 ~ 2147483647)、int64(-9223372036854775808 ~ 9223372036854775807)也可以按照這樣的方式匹配,當(dāng)然這只是我簡(jiǎn)單看了一下后的理解,可能存在還有更簡(jiǎn)單的方法,歡迎各位大佬賜教。

總結(jié)

到此這篇關(guān)于如何使用正則表達(dá)式對(duì)輸入數(shù)字進(jìn)行匹配的文章就介紹到這了,更多相關(guān)正則表達(dá)式對(duì)輸入數(shù)字匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論