對正規表示式的一些記錄

余月七發表於2021-07-25

對正規表示式的一些記錄

前言

這段時間由於個人事比較多,所以沒有好好記錄一下一些內容,今天突然想起來對於正規表示式這塊還是沒有一個認知,所以拎出來記錄一下關於它的一些內容


一、什麼是正規表示式?

​ 其實就像我們搜尋以及用什麼東西時候的規則,“正”字可以理解為經常出現、通用的意思;“則”可以理解為有規則的,而這個表示式的話,總體意思就是使用我們通用的規則去匹配文字。(去讓計算機認識這種規則),所以它就是一門專門用於字串處理的增強語法


二、為什麼要用正規表示式?

​ 主要用於前端校驗,JavaScript和Java都支援這種語法(因為個人原因,所以並未對其過多瞭解),目前是在表單驗證時,去準確的判斷一個字串是不是某種固定格式。比如郵箱的驗證、手機號的驗證等。目的是避免惡意使用者的亂輸入,保證表單的收集是我們想要的格式!


三、怎麼用?

​ 個人主要是在JS中用到,定義方式如下,具體的話可以網上搜教程,這裡舉個例子。

var reg=/正規表示式/; //正則要用雙 / / 包 起來
“//”它們用來指示模式的開始和結束,通過它們可以告訴 JS 直譯器它正在處理正規表示式:

3.1 需要記住的特殊符號

^: 		以什麼開頭
$: 		以什麼結尾
\d:		表示任意一位數字
\w:		表示數字,大小寫英文字元,常見的特殊符號。
.:		表示任意內容。
:		可以表示轉義
{6}:   表示匹配前面的字元6次。
{n,m}:	匹配前面的字元n到m次。
{n,}:	匹配前面的字元至少n次。
*:		匹配前面的字元0次或多次。
+:		匹配前面的字元至少1次。
?:		匹配前面的字元0次或者1次。

3.2 附錄一:常用表示式

1.非負整數 /^\d+$/

2.正整數 /^[0-9][1-9][0-9]$/

3.非正整數 /^((-\d+)|(0+))$/

4.負整數 /^-[0-9][1-9][0-9]$/

5.整數 /^-?\d+$/

6.非負浮點數 /^\d+(.\d+)?$/

7.正浮點數 /^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$/

8.非正浮點數 /^((-\d+(.\d+)?)|(0+(.0+)?))$/

9.負浮點數 /^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$/

10.浮點數 /^(-?\d+)(.\d+)?$/

11.數字 /^\d+(.{1}\d+)?$/

12.由26個英文字母組成的字串 /^[A-Za-z]+$/

13.由26個英文字母的大寫組成的字串 /^[A-Z]+$/

14.由26個英文字母的小寫組成的字串 /^[a-z]+$/

15.由數字和26個英文字母組成的字串 /^[A-Za-z0-9]+$/

16.由數字、26個英文字母或者下劃線組成的字串 /^\w+$/

17.匹配所有單位元組長度的字元組成的字串 /^[\x00-\xff]+$/

18.匹配所有雙位元組長度的字元組成的字串 /^[^\x00-\xff]+$/

19.字串是否含有雙位元組字 /[^\x00-\xff]+/

20.email地址 /^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$/
    
21.url地址 /^[a-zA-z]+://(\w+(-\w+))(.(\w+(-\w+)))(\?\S)?$/

22.匹配中文字元的正則 /[u4e00-u9fa5]/
    
23.匹配雙位元組字元(包括漢字在內) /[^x00-xff]/
    
24.匹配空行的正則 /n[s| ]*r/

25.匹配HTML標記的正則 /<(.)>.|<(.*) />/

26.匹配首尾空格的正則 /(^s)|(s$)/

27.匹配IP地址的正則 /(d+).(d+).(d+).(d+)/

28.驗證檔名由字母,數字,下滑線組成 /^((\w+)(.{1})(\w+))$/

29匹配日期(2000-2999)
/^20\d{2}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1])))$/
    
30.匹配日期時間
/^(1|2\d{3}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3([0|1]))))( (\d{2}):(\d{2}):(\d{2}))?$/

3.3 附錄二:限制文字框輸入內容

舉例:
只能輸入中文:
         onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" 
         onbeforepaste="clipboardData.setData('text',
         clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

只能輸入全形字元:
         onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" 
         onbeforepaste="clipboardData.setData('text',
         clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

只能輸入數字:
         onkeyup="value=value.replace(/[^d]/g,'')" 
         onbeforepaste="clipboardData.setData('text',
 		 clipboardData.getData('text').replace(/[^d]/g,''))"

只能輸入數字和英文:
         onkeyup="value=value.replace(/[W]/g,'')" 
       	 onbeforepaste="clipboardData.setData('text',
         clipboardData.getData('text').replace(/[^d]/g,''))"

1.整數或者小數:^[0-9]+.{0,1}[0-9]{0,2}$

2.只能輸入數字:"^[0-9]*$"。

3.只能輸入n位的數字:"^\d{n}$"。

4.只能輸入至少n位的數字:"^\d{n,}$"。

5.只能輸入m~n位的數字:。"^\d{m,n}$"

6.只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。

7.只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。

8.只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。

9.只能輸入非零的正整數:"^+?[1-9][0-9]*$"。

10只能輸入非零的負整數:"^-[1-9][]0-9"*$。

11.只能輸入長度為3的字元:"^.{3}$"。

12.只能輸入由26個英文字母組成的字串:"^[A-Za-z]+$"。

13.只能輸入由26個大寫英文字母組成的字串:"^[A-Z]+$"。

14.只能輸入由26個小寫英文字母組成的字串:"^[a-z]+$"。

15.只能輸入由數字和26個英文字母組成的字串:"^[A-Za-z0-9]+$"。

16.只能輸入由數字、26個英文字母或者下劃線組成的字串:"^\w+$"。

17.驗證使用者密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字元、數字和下劃線。

18.驗證是否含有^%&'',;=?$\"等字元:"[^%&'',;=?$\x22]+"。

19.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"

20.驗證Email地址:"^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$"。

21.驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

22.驗證電話號碼:"^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

23.驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。

24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。

25.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。整數或者小數:^[0-9]+.{0,1}[0-9]{0,2}$

3.4 速查可參考文章

最全常用正規表示式大全

四、擴充套件理解

注:以下部落格為參考文章,並未有任何打廣告的嫌疑!

掘金 作者:scq000正規表示式到底是什麼

掘金 作者:Vincent Ko可能是最好的正規表示式的教程筆記了吧...

部落格園 作者:SkySoot什麼是正規表示式

相關文章