對正規表示式的一些記錄
前言
這段時間由於個人事比較多,所以沒有好好記錄一下一些內容,今天突然想起來對於正規表示式這塊還是沒有一個認知,所以拎出來記錄一下關於它的一些內容
一、什麼是正規表示式?
其實就像我們搜尋以及用什麼東西時候的規則,“正”字可以理解為經常出現、通用的意思;“則”可以理解為有規則的,而這個表示式的話,總體意思就是使用我們通用的規則去匹配文字。(去讓計算機認識這種規則),所以它就是一門專門用於字串處理的增強語法。
二、為什麼要用正規表示式?
主要用於前端校驗,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 :什麼是正規表示式