濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 詳解正則表達(dá)式之?dāng)?shù)字驗(yàn)證

詳解正則表達(dá)式之?dāng)?shù)字驗(yàn)證

熱門標(biāo)簽:鄂州人工智能電銷機(jī)器人軟件 線上教育ai外呼系統(tǒng) 實(shí)用地圖標(biāo)注app 宿遷智能外呼系統(tǒng)供應(yīng)商 地圖標(biāo)注商戶中心要收錢多少 菏澤智能ai電銷機(jī)器人銷售公司 地圖標(biāo)注字母的軟件 400免費(fèi)電話去哪申請(qǐng) css百度地圖標(biāo)注位置顯示

這篇博文將介紹一些常用的數(shù)字驗(yàn)證方法,包括整數(shù)驗(yàn)證、國(guó)內(nèi)電話號(hào)碼驗(yàn)證、身份證號(hào)碼驗(yàn)證、以及IP地址驗(yàn)證等等驗(yàn)證方法,如果大家對(duì)基本概念不夠了解,可以先看看我之前寫的博文。

第一部分:數(shù)值驗(yàn)證

1.驗(yàn)證只包含數(shù)字、指定長(zhǎng)度(N)的字符串

比如我要驗(yàn)證只包含數(shù)字,長(zhǎng)度為6的字符串,如123456,則可以使用下面幾種效果相同的驗(yàn)證方式

復(fù)制代碼 代碼如下:

\d{6}
[0-9]{6}
\d\d\d\d\d\d

上述幾種方式效果相同,更推薦第一種,它更加簡(jiǎn)潔! 注:后面我都會(huì)使用較為簡(jiǎn)潔的正則表達(dá)式,而不會(huì)太過啰嗦!

2.驗(yàn)證只包含數(shù)字、指定范圍長(zhǎng)度(N-M)的單詞字符串

比如我要驗(yàn)證只包含數(shù)字,長(zhǎng)度在5到8之間的字符串,如12345,123456,1234567,12345678,則可以使用的驗(yàn)證方式

3.非負(fù)整數(shù)的驗(yàn)證

顯然0,100,56等都是非負(fù)整數(shù),而-12,0135等都不是非負(fù)整數(shù),驗(yàn)證演示如下:

     

我們可以看到021 -56由于不是正數(shù),不會(huì)被選中。(注意:其中用到了^,表示必須以0或者[1-9]開頭,因此-56沒有被選中;如果沒有^,那么-56中的56會(huì)被選中)

 4.任意整數(shù)的驗(yàn)證

任意整數(shù)即如0,456,-65等等這是任意整數(shù),也就是說我們需要把正數(shù)和非負(fù)整數(shù)結(jié)合起來(lái),驗(yàn)證演示如下:

  

于是所有的正數(shù)包括0、正整數(shù)和負(fù)整數(shù)都匹配了。

 5.指定范圍內(nèi)的正整數(shù)的驗(yàn)證

比如說我們希望驗(yàn)證1-5678區(qū)間內(nèi)的正整數(shù),如465,23,5677等都屬于這個(gè)范圍,這該怎么驗(yàn)證呢?別著急,我們可以分區(qū)間驗(yàn)證:

  • 使用\b[1-9]\d{0-2}\b來(lái)驗(yàn)證1-999之間的所有正整數(shù)
  • 使用\b[1-4]\d{3}\b來(lái)驗(yàn)證1000-4999之間的所有正整數(shù)
  • 使用\b5[0-5]\d{2}\b來(lái)驗(yàn)證5000-5599之間的所有正整數(shù)
  • 使用\b56[0-6]\d\b來(lái)驗(yàn)證5600-5669之間的所有正整數(shù)
  • 使用\b567[0-8]\b來(lái)驗(yàn)證5670-5678之間的所有正整數(shù)

綜上所述,我們可以使用如下正則表達(dá)式來(lái)驗(yàn)證1-5678之間的所有正整數(shù):

復(fù)制代碼 代碼如下:

^([1-9]\d{0,2})|([1-4]\d{3})|(5[0-5]\d{2})|(56[0-6]\d)|(567[0-8])$

但果真是這樣嗎?驗(yàn)證如下:

  

怎么成這樣了呢???后面的三個(gè)數(shù)的驗(yàn)證都不是我們想要的效果?。?!這是因?yàn)檎齽t表達(dá)式在匹配時(shí)會(huì)從左向右匹配,其中2602和4999因?yàn)槭褂肹1-9]\d{0,2}可以完成匹配,所以就無(wú)需繼續(xù)了。

我們把正則表達(dá)式的順序倒過來(lái)試試? 如下所示:

復(fù)制代碼 代碼如下:

^(567[0-8])|(56[0-6]\d)|(5[0-5]\d{2})|([1-4]\d{3})|([1-9]\d{0,2})$

效果如下:

 

這次令我們高興的是在1-5678之間的數(shù)都被選上了?。〉?89和-5中的5被選上了。這是因?yàn)槲覀冎辉诘谝粋€(gè)分組前添加了^,我們需要做的是每個(gè)分組前都添加^。如下所示:

復(fù)制代碼 代碼如下:

^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$

這次效果就沒有問題了,如下:

 

由此可知:組合順序原則(正整數(shù)):依次從最大值的范圍組合到最小值的范圍組合。

從這個(gè)例子受到啟發(fā),我們對(duì)于指定范圍內(nèi)的正整數(shù)的驗(yàn)證的第一個(gè)例子中的每一個(gè)分組后添加$或\b也可以解決問題。

也就是說下面的兩行代碼均有效:

復(fù)制代碼 代碼如下:

^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$
^([1-9]\d{0,2})$|([1-4]\d{3})$|(5[0-5]\d{2})$|(56[0-6]\d)$|(567[0-8])$

6.實(shí)數(shù)的驗(yàn)證

這里要介紹的實(shí)數(shù)的驗(yàn)證是至少包含一個(gè)小數(shù)點(diǎn)的實(shí)數(shù),因此實(shí)數(shù)就包括了整數(shù)部分、小數(shù)部分和小數(shù)點(diǎn)。

 驗(yàn)證方法如下:

復(fù)制代碼 代碼如下:

-?(0|([1-9]\d*))\.\d+

其中-?表示可以有負(fù)號(hào)也可以沒有負(fù)號(hào),(0|[1-9]\d*)表示整數(shù)部分可以是0也可以是不以0開頭的其他整數(shù),\.是為了對(duì)元字符.進(jìn)行轉(zhuǎn)義,\d+表示在小數(shù)點(diǎn)后面可以有1個(gè)或多個(gè)數(shù)字重復(fù)。所以它可以用來(lái)驗(yàn)證一般形式的實(shí)數(shù)(如0.0、1.2、-1.20等),還可以用來(lái)驗(yàn)證負(fù)0,如-0.0、-0.00等。

如果我們希望驗(yàn)證指定精度的實(shí)數(shù),我們只需要把末尾的+修改成相應(yīng)的精度即可,如下所示:

復(fù)制代碼 代碼如下:

-?(0|([1-9]\d*))\.\d{3}$

即表示小數(shù)部分長(zhǎng)度為3的實(shí)數(shù)。

7.科學(xué)計(jì)數(shù)法的驗(yàn)證

科學(xué)計(jì)數(shù)法就是把一個(gè)數(shù)記成a*10^n的形式。其中,a是一位整數(shù)或著是只有一位整數(shù)的小數(shù)(如5,3.2等等),所以可知1=|a|10。而n是一位整數(shù)。所以不難得出科學(xué)計(jì)數(shù)法的驗(yàn)證方法如下所示:

復(fù)制代碼 代碼如下:

^-?[1-9](\.\d+)?\*10\^-?\d+$

第二部分:4種國(guó)內(nèi)電話號(hào)碼的驗(yàn)證

我們知道中國(guó)的電話號(hào)碼的形式不外乎有下面四種:

1.手機(jī)號(hào)碼

2.固定電話號(hào)碼(不包括區(qū)號(hào))

3.區(qū)號(hào)+固定電話號(hào)碼

4.區(qū)號(hào)+固定電話號(hào)碼+分機(jī)號(hào)

下面我們按照順序逐一介紹

1.手機(jī)號(hào)碼

目前國(guó)內(nèi)的手機(jī)號(hào)碼多是13開頭、15開頭和18開頭,并且第三位數(shù)字目前都有【0-9】這10個(gè)數(shù),所以驗(yàn)證起來(lái)就很簡(jiǎn)單了。如下所示:

     

顯然第二種方法更簡(jiǎn)單一些。

 2.固定電話號(hào)碼(不包括區(qū)號(hào))

固定電話號(hào)碼一般為7位(如2268358)或8位(82668110),所以驗(yàn)證起來(lái)是非常簡(jiǎn)單的,如下所示:

 

但是,某個(gè)地區(qū)的電話號(hào)碼往往是固定在一個(gè)具體的范圍里的,比如新疆石河子某個(gè)地區(qū)為2268001-2268999,這時(shí)想要確定就需要稍微花一些功夫了。

我們可以把2268001-2268999劃分為2268001-2268009和2268010-2268099和2268100-2268999。這樣,把驗(yàn)證三者的正則表達(dá)式組合起來(lái)即可。如下所示:

復(fù)制代碼 代碼如下:

2268((00[1-9])|(0[1-9]\d)|([1-9]\d{2}))

效果如下:

 

PS 這里就不具體介紹啦,都是很簡(jiǎn)單的知識(shí),如果有疑問可以看我的上一篇博文,它對(duì)基本知識(shí)闡述得很具體。

3.區(qū)號(hào)+固定電話號(hào)碼驗(yàn)證

區(qū)號(hào)的長(zhǎng)度一般為3-4位,固定電話號(hào)碼的長(zhǎng)度一般為7-8位,比如029-82668110為3位區(qū)號(hào)和8位固定電話號(hào)碼的組合,0993-2268358是4位區(qū)號(hào)和7位固定號(hào)碼的組合。且在區(qū)號(hào)和固定號(hào)碼之間一般都是由-(連字符)鏈接的??芍覀冎恍枰獙?duì)區(qū)號(hào)和固定電話分別驗(yàn)證即可?! ?/p>

復(fù)制代碼 代碼如下:

\b0\d{2,3}[- ]?\d{7,8}\b

演示效果如下:

 

4.區(qū)號(hào)+固定電話號(hào)碼驗(yàn)證+分機(jī)號(hào)碼驗(yàn)證

一些比較大的公司、企業(yè)或者政府部門在向外部提供固定的電話號(hào)碼是,除了區(qū)號(hào)、固定電話號(hào)碼之外,還可能包括分機(jī)號(hào)碼。

下面我們以4位的分級(jí)號(hào)碼為例。一般在分機(jī)號(hào)碼之前可能是空格,也可能是-(連字符),還可能什么都沒有。 于是驗(yàn)證方法如下:

復(fù)制代碼 代碼如下:

\b0\d{2,3}[- ]?\d{7,8}[- ]?\d{4}\b

演示效果如下:

    

第三部分:2種身份證號(hào)碼的驗(yàn)證

1.基本知識(shí)

15位身份證號(hào)碼:

1985年我國(guó)實(shí)行居民身份證制度,當(dāng)時(shí)簽發(fā)的身份證號(hào)碼是15位的。其中前6位為地址碼,中間6位為出生日期碼(年月日各用兩位數(shù)字表示),最后三位為順序碼。

(注:順序碼是對(duì)同年、同月、同日出生的人編訂序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性)

18位身份證號(hào)碼:

1999年我國(guó)開始使用18位的身份證號(hào)。其中前6位為地址碼,中間8位為出生日期碼(年用4位表示,月日各用2位表示),最后四位為順序碼和校驗(yàn)碼。

(注:年份用4位是因?yàn)槭褂?位會(huì)導(dǎo)致沖突,比如1903年和2003年出生的人。而校驗(yàn)碼主要是為了校驗(yàn)計(jì)算機(jī)輸入公民身份證號(hào)碼的前17位數(shù)字是否正確,其取值范圍是0至10,當(dāng)值等于10時(shí),用X表示)

 2. 15位身份證號(hào)碼的驗(yàn)證

前6位地址碼可以為任意數(shù)字,78位的年份碼為任意數(shù)字,9和10位的月份碼應(yīng)當(dāng)在01-12之間,11和12位的日期碼在01-31之間,最后三位的順序碼為長(zhǎng)度為3的任意字符串。于是驗(yàn)證方法如下:

復(fù)制代碼 代碼如下:

\b\d{8}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}\b

 3. 18位身份證號(hào)碼的驗(yàn)證

前6位地址碼為任意數(shù)字,7-10位的年份碼前兩位以19或20開頭(這里就不考慮18開頭了),月日同15位的身份證號(hào)碼,三位順序碼為長(zhǎng)度為3的任意字符串,最后以為驗(yàn)證碼為0-9或X。于是驗(yàn)證方法如下:

\b\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)\b

因?yàn)橹灰懒怂悸?,正則表達(dá)式寫出來(lái)并不難,所以這里就不細(xì)講了。

 第四部分:郵政編碼驗(yàn)證

我國(guó)郵政編碼的編碼規(guī)則:我國(guó)采用四級(jí)六位編碼制,前兩位表示省、市、自治區(qū),第三位代表郵區(qū),第四位代表縣、市,最后兩位代表投遞郵局,最后兩位是代表從這個(gè)城市哪個(gè)投遞區(qū)投遞的,即投遞區(qū)的位置。例如:郵政編碼“130021”“13”代表吉林省,“00”代表省會(huì)長(zhǎng)春,“21”代表所在投遞區(qū)。

因此驗(yàn)證我國(guó)的郵政編碼就十分方便了,如下所示:

     

第五部分:兩種IP地址的驗(yàn)證

IP地址可以簡(jiǎn)單驗(yàn)證,還可以精確驗(yàn)證。

1.簡(jiǎn)單IP地址驗(yàn)證

我首先ping到了https://www.jb51.net/的IP地址:42.121.252.58。 實(shí)際上IP地址一般是1~3位整數(shù).1~3位整數(shù).1~3位整數(shù).1~3位整數(shù),于是我們可以通過下面的正則表達(dá)式作簡(jiǎn)單驗(yàn)證:

([1-9]\d{0,2}\.){3}[1-9]\d{0,2}

驗(yàn)證效果如下所示:

 

2.精確IP地址驗(yàn)證

顯然,上面的簡(jiǎn)單IP地址驗(yàn)證是不精確的,比如999.999.999.999這就不是一個(gè)正確的IP地址。

我們知道32位IP地址的每一個(gè)數(shù)值都是在0~255之間,所以對(duì)于1~3位整數(shù).1~3位整數(shù).1~3位整數(shù).1~3位整數(shù)我們應(yīng)該將整數(shù)限制在0~255之間,顯然,這里要使用分區(qū)間的方法了。

0-99之間可以這樣表示:([1-9]\d?)|0              (注意這里的表示方法,如果這個(gè)數(shù)不為0,那么前面就不能有0)

100-199之間可以這樣表示:1\d{2}

200-249之間可以這樣表示:2[0-4]\d

250-255之間可以這樣表示: 25[0-5]

于是綜上所述,可以得到精確IP地址驗(yàn)證的方法如下:

復(fù)制代碼 代碼如下:

(((25[0-5])|2[0-4]\d|1\d{2}|[1-9]\d|0)\.){3}((25[0-5])|2[0-4]\d|1\d{2}|[1-9]\d|0)

演示效果如下:

 

值得注意的是:分組是至關(guān)重要的,只有分對(duì)了組,才有可能不出問題。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 常見的數(shù)字驗(yàn)證正則表達(dá)式整理
  • JS正則表達(dá)式驗(yàn)證數(shù)字代碼
  • 最全的常用正則表達(dá)式大全——包括校驗(yàn)數(shù)字、字符、一些特殊的需求等
  • java正則表達(dá)式提取數(shù)字的方法實(shí)例
  • js限制文本框只能輸入數(shù)字(正則表達(dá)式)
  • js正則表達(dá)式匹配數(shù)字字母下劃線等
  • JavaScript基于正則表達(dá)式的數(shù)字判斷函數(shù)
  • 校驗(yàn)普通電話、傳真號(hào)碼的正則表達(dá)式(可以+開頭,除數(shù)字外,可含有-)
  • Java正則表達(dá)式過濾出字母、數(shù)字和中文
  • 匹配5到10位無(wú)重復(fù)數(shù)字的正則表達(dá)式
  • 利用正則表達(dá)式(只錄入中文,數(shù)字,英文)
  • asp正則表達(dá)式匹配數(shù)字$數(shù)字$數(shù)字$

標(biāo)簽:咸陽(yáng) 恩施 鞍山 三亞 六安 梅州 池州 綿陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解正則表達(dá)式之?dāng)?shù)字驗(yàn)證》,本文關(guān)鍵詞  詳解,正則,表達(dá)式,之,數(shù)字,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解正則表達(dá)式之?dāng)?shù)字驗(yàn)證》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解正則表達(dá)式之?dāng)?shù)字驗(yàn)證的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    化隆| 泰顺县| 全南县| 康乐县| 涿鹿县| 秀山| 和平县| 浦江县| 镇江市| 曲麻莱县| 许昌市| 基隆市| 武夷山市| 安西县| 达拉特旗| 富宁县| 苗栗县| 奈曼旗| 乌兰浩特市| 贡嘎县| 玉门市| 万全县| 广宗县| 饶河县| 娱乐| 临海市| 嘉定区| 武强县| 雷山县| 四会市| 宁河县| 元谋县| 城口县| 长兴县| 同心县| 淮滨县| 吉安县| 子长县| 宜兰县| 观塘区| 游戏|