這篇博文將介紹一些常用的數字驗證方法,包括整數驗證、國內電話號碼驗證、身份證號碼驗證、以及IP地址驗證等等驗證方法,如果大家對基本概念不夠了解,可以先看看我之前寫的博文。
第一部分:數值驗證
1.驗證只包含數字、指定長度(N)的字符串
比如我要驗證只包含數字,長度為6的字符串,如123456,則可以使用下面幾種效果相同的驗證方式
復制代碼 代碼如下:
\d{6}
[0-9]{6}
\d\d\d\d\d\d
上述幾種方式效果相同,更推薦第一種,它更加簡潔! 注:后面我都會使用較為簡潔的正則表達式,而不會太過啰嗦!
2.驗證只包含數字、指定范圍長度(N-M)的單詞字符串
比如我要驗證只包含數字,長度在5到8之間的字符串,如12345,123456,1234567,12345678,則可以使用的驗證方式

3.非負整數的驗證
顯然0,100,56等都是非負整數,而-12,0135等都不是非負整數,驗證演示如下:
我們可以看到021 -56由于不是正數,不會被選中。(注意:其中用到了^,表示必須以0或者[1-9]開頭,因此-56沒有被選中;如果沒有^,那么-56中的56會被選中)
4.任意整數的驗證
任意整數即如0,456,-65等等這是任意整數,也就是說我們需要把正數和非負整數結合起來,驗證演示如下:
于是所有的正數包括0、正整數和負整數都匹配了。
5.指定范圍內的正整數的驗證
比如說我們希望驗證1-5678區間內的正整數,如465,23,5677等都屬于這個范圍,這該怎么驗證呢?別著急,我們可以分區間驗證:
- 使用\b[1-9]\d{0-2}\b來驗證1-999之間的所有正整數
- 使用\b[1-4]\d{3}\b來驗證1000-4999之間的所有正整數
- 使用\b5[0-5]\d{2}\b來驗證5000-5599之間的所有正整數
- 使用\b56[0-6]\d\b來驗證5600-5669之間的所有正整數
- 使用\b567[0-8]\b來驗證5670-5678之間的所有正整數
綜上所述,我們可以使用如下正則表達式來驗證1-5678之間的所有正整數:
復制代碼 代碼如下:
^([1-9]\d{0,2})|([1-4]\d{3})|(5[0-5]\d{2})|(56[0-6]\d)|(567[0-8])$
但果真是這樣嗎?驗證如下:
怎么成這樣了呢???后面的三個數的驗證都不是我們想要的效果啊!!這是因為正則表達式在匹配時會從左向右匹配,其中2602和4999因為使用[1-9]\d{0,2}可以完成匹配,所以就無需繼續了。
我們把正則表達式的順序倒過來試試? 如下所示:
復制代碼 代碼如下:
^(567[0-8])|(56[0-6]\d)|(5[0-5]\d{2})|([1-4]\d{3})|([1-9]\d{0,2})$
效果如下:
這次令我們高興的是在1-5678之間的數都被選上了!!但789和-5中的5被選上了。這是因為我們只在第一個分組前添加了^,我們需要做的是每個分組前都添加^。如下所示:
復制代碼 代碼如下:
^(567[0-8])|^(56[0-6]\d)|^(5[0-5]\d{2})|^([1-4]\d{3})|^([1-9]\d{0,2})$
這次效果就沒有問題了,如下:
由此可知:組合順序原則(正整數):依次從最大值的范圍組合到最小值的范圍組合。
從這個例子受到啟發,我們對于指定范圍內的正整數的驗證的第一個例子中的每一個分組后添加$或\b也可以解決問題。
也就是說下面的兩行代碼均有效:
復制代碼 代碼如下:
^(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.實數的驗證
這里要介紹的實數的驗證是至少包含一個小數點的實數,因此實數就包括了整數部分、小數部分和小數點。
驗證方法如下:
復制代碼 代碼如下:
-?(0|([1-9]\d*))\.\d+
其中-?表示可以有負號也可以沒有負號,(0|[1-9]\d*)表示整數部分可以是0也可以是不以0開頭的其他整數,\.是為了對元字符.進行轉義,\d+表示在小數點后面可以有1個或多個數字重復。所以它可以用來驗證一般形式的實數(如0.0、1.2、-1.20等),還可以用來驗證負0,如-0.0、-0.00等。
如果我們希望驗證指定精度的實數,我們只需要把末尾的+修改成相應的精度即可,如下所示:
復制代碼 代碼如下:
-?(0|([1-9]\d*))\.\d{3}$
即表示小數部分長度為3的實數。
7.科學計數法的驗證
科學計數法就是把一個數記成a*10^n的形式。其中,a是一位整數或著是只有一位整數的小數(如5,3.2等等),所以可知1=|a|10。而n是一位整數。所以不難得出科學計數法的驗證方法如下所示:
復制代碼 代碼如下:
^-?[1-9](\.\d+)?\*10\^-?\d+$
第二部分:4種國內電話號碼的驗證
我們知道中國的電話號碼的形式不外乎有下面四種:
1.手機號碼
2.固定電話號碼(不包括區號)
3.區號+固定電話號碼
4.區號+固定電話號碼+分機號
下面我們按照順序逐一介紹
1.手機號碼
目前國內的手機號碼多是13開頭、15開頭和18開頭,并且第三位數字目前都有【0-9】這10個數,所以驗證起來就很簡單了。如下所示:
顯然第二種方法更簡單一些。
2.固定電話號碼(不包括區號)
固定電話號碼一般為7位(如2268358)或8位(82668110),所以驗證起來是非常簡單的,如下所示:
但是,某個地區的電話號碼往往是固定在一個具體的范圍里的,比如新疆石河子某個地區為2268001-2268999,這時想要確定就需要稍微花一些功夫了。
我們可以把2268001-2268999劃分為2268001-2268009和2268010-2268099和2268100-2268999。這樣,把驗證三者的正則表達式組合起來即可。如下所示:
復制代碼 代碼如下:
2268((00[1-9])|(0[1-9]\d)|([1-9]\d{2}))
效果如下:
PS 這里就不具體介紹啦,都是很簡單的知識,如果有疑問可以看我的上一篇博文,它對基本知識闡述得很具體。
3.區號+固定電話號碼驗證
區號的長度一般為3-4位,固定電話號碼的長度一般為7-8位,比如029-82668110為3位區號和8位固定電話號碼的組合,0993-2268358是4位區號和7位固定號碼的組合。且在區號和固定號碼之間一般都是由-(連字符)鏈接的。可知,我們只需要對區號和固定電話分別驗證即可。
復制代碼 代碼如下:
\b0\d{2,3}[- ]?\d{7,8}\b
演示效果如下:
4.區號+固定電話號碼驗證+分機號碼驗證
一些比較大的公司、企業或者政府部門在向外部提供固定的電話號碼是,除了區號、固定電話號碼之外,還可能包括分機號碼。
下面我們以4位的分級號碼為例。一般在分機號碼之前可能是空格,也可能是-(連字符),還可能什么都沒有。 于是驗證方法如下:
復制代碼 代碼如下:
\b0\d{2,3}[- ]?\d{7,8}[- ]?\d{4}\b
演示效果如下:
第三部分:2種身份證號碼的驗證
1.基本知識
15位身份證號碼:
1985年我國實行居民身份證制度,當時簽發的身份證號碼是15位的。其中前6位為地址碼,中間6位為出生日期碼(年月日各用兩位數字表示),最后三位為順序碼。
(注:順序碼是對同年、同月、同日出生的人編訂序號,順序碼的奇數分配給男性,偶數分配給女性)
18位身份證號碼:
1999年我國開始使用18位的身份證號。其中前6位為地址碼,中間8位為出生日期碼(年用4位表示,月日各用2位表示),最后四位為順序碼和校驗碼。
(注:年份用4位是因為使用2位會導致沖突,比如1903年和2003年出生的人。而校驗碼主要是為了校驗計算機輸入公民身份證號碼的前17位數字是否正確,其取值范圍是0至10,當值等于10時,用X表示)
2. 15位身份證號碼的驗證
前6位地址碼可以為任意數字,78位的年份碼為任意數字,9和10位的月份碼應當在01-12之間,11和12位的日期碼在01-31之間,最后三位的順序碼為長度為3的任意字符串。于是驗證方法如下:
復制代碼 代碼如下:
\b\d{8}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}\b
3. 18位身份證號碼的驗證
前6位地址碼為任意數字,7-10位的年份碼前兩位以19或20開頭(這里就不考慮18開頭了),月日同15位的身份證號碼,三位順序碼為長度為3的任意字符串,最后以為驗證碼為0-9或X。于是驗證方法如下:
\b\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)\b
因為只要知道了思路,正則表達式寫出來并不難,所以這里就不細講了。
第四部分:郵政編碼驗證
我國郵政編碼的編碼規則:我國采用四級六位編碼制,前兩位表示省、市、自治區,第三位代表郵區,第四位代表縣、市,最后兩位代表投遞郵局,最后兩位是代表從這個城市哪個投遞區投遞的,即投遞區的位置。例如:郵政編碼“130021”“13”代表吉林省,“00”代表省會長春,“21”代表所在投遞區。
因此驗證我國的郵政編碼就十分方便了,如下所示:
第五部分:兩種IP地址的驗證
IP地址可以簡單驗證,還可以精確驗證。
1.簡單IP地址驗證
我首先ping到了https://www.jb51.net/的IP地址:42.121.252.58。 實際上IP地址一般是1~3位整數.1~3位整數.1~3位整數.1~3位整數,于是我們可以通過下面的正則表達式作簡單驗證:
([1-9]\d{0,2}\.){3}[1-9]\d{0,2}
驗證效果如下所示:

2.精確IP地址驗證
顯然,上面的簡單IP地址驗證是不精確的,比如999.999.999.999這就不是一個正確的IP地址。
我們知道32位IP地址的每一個數值都是在0~255之間,所以對于1~3位整數.1~3位整數.1~3位整數.1~3位整數我們應該將整數限制在0~255之間,顯然,這里要使用分區間的方法了。
0-99之間可以這樣表示:([1-9]\d?)|0 (注意這里的表示方法,如果這個數不為0,那么前面就不能有0)
100-199之間可以這樣表示:1\d{2}
200-249之間可以這樣表示:2[0-4]\d
250-255之間可以這樣表示: 25[0-5]
于是綜上所述,可以得到精確IP地址驗證的方法如下:
復制代碼 代碼如下:
(((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)
演示效果如下:
值得注意的是:分組是至關重要的,只有分對了組,才有可能不出問題。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 常見的數字驗證正則表達式整理
- JS正則表達式驗證數字代碼
- 最全的常用正則表達式大全——包括校驗數字、字符、一些特殊的需求等
- java正則表達式提取數字的方法實例
- js限制文本框只能輸入數字(正則表達式)
- js正則表達式匹配數字字母下劃線等
- JavaScript基于正則表達式的數字判斷函數
- 校驗普通電話、傳真號碼的正則表達式(可以+開頭,除數字外,可含有-)
- Java正則表達式過濾出字母、數字和中文
- 匹配5到10位無重復數字的正則表達式
- 利用正則表達式(只錄入中文,數字,英文)
- asp正則表達式匹配數字$數字$數字$