網上經常看到用正則表達式校驗數據的文章,有的雖然總結得很全,但是大多數都沒有經過嚴格驗證,錯誤較多。
本文包含三十余條不同格式數據校驗的C#正則表達式,一般均附有說明,且在Visual Studio里面跑過。
正則表達式基本規則對照表:
推薦一個不錯的網站:在線正則表達式測試
/*
說明:
1、下面的正則都是以^開頭,以$結尾,說明是把整個字符串拿來匹配。
2、下面的正則表達式前都應該加@,例如:bool reg = Regex.IsMatch("35_ab", @"^[0-9a-zA-Z_]{1,}$");
3、左括號和右括號不要濫用。
4、形如[0-9]這樣的表示中最好不要有空格,例如不宜寫成[0 - 9]。
*/
可以用下面的控制台程序進行正則表達式的驗證:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace Console_regex { class Program { static void Main(string[] args) { bool l = Regex.IsMatch("_65_", @"^[0-9a-zA-Z_]{1,}$"); if (l ==true) { Console.WriteLine("匹配正確"); } else { Console.WriteLine("匹配錯誤"); } Console.ReadKey(); } } }
1.由數字、26個英文字母或者下划線組成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非負整數(正整數+0): +表示出現重復1次或多次 ^\d+$ 3.正整數:中間的[0 - 9] 后面沒有*,說明至少有一位1到9的數字 ^[0-9]*[1 - 9][0 - 9]*$ 4.非正整數(負整數 + 0):|是或運算,也可以將最外面的一層()剝掉,寫作^(-\d+)|(0+)$ ^((-\d+)|(0+))$ 5.負整數 :由於中間那個[1 - 9] 后面沒有*,所以至少有一個1到9之間的數,所以-0000這樣的數據也不能通過 ^-[0-9]*[1 - 9][0 - 9]*$ 6.整數: 由於-后面有?(表示重復0次或1次),所以-號是可有可無的,因此可以表示全體整數 ^-?\d+$ 7.正整數或非負浮點數(正浮點數 + 0):+表示出現重復1次或多次,? 表示重復0次或1次 ^\d+(\.\d+)?$ 8.正浮點數 :匹配三類,包括0.0987、00.0987以及00100.0987的形式,主要考慮不能含0,即沒有00.000這種 ^([0-9]+\.[0-9]*[1 - 9][0 - 9]*)|([0-9]*[1 - 9][0 - 9]*\.[0-9]+)$ 9.非正浮點數(負浮點數 + 0):前面匹配負浮點數和形如-00.000這樣的0,后面匹配0和0.00這樣的0,? 表示重復0次或1次 ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 10.負浮點數 :中間這個或運算|是否需要呢? ^-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+))$ 11.浮點數 :不對,感覺應該是^-?\d+\.\d+$ ^(-?\d+)(\.\d+)?$ 12.由26個英文字母組成的字符串 : +表示出現重復1次或多次 ^[A-Za-z]+$ 13.由26個英文字母的大寫組成的字符串 : ^[A-Z]+$ 14.由26個英文字母的小寫組成的字符串 : ^[a-z]+$ 15.由數字和26個英文字母組成的字符串 :[A-Za-z0-9]中是或的關系,也就是只要出現大寫字母、小寫字母或數字都行 ^[A-Za-z0-9]+$ 16.由數字、26個英文字母、漢字或者下划線組成的字符串 : 匹配字母或數字或下划線或漢字,注意不能有空格或其他特殊字符 ^\w+$ 17.email地址 :匹配xh6300@163.com和xh.tuce @qq.com這兩類格式的郵箱(.不同),且可以有中文和短橫杠-,注意中括號里的項是或的關系 ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ 18.url: url的開頭可以是http或者ftp、file等,url中可以有短橫杠-,\? 是對問號的轉義,\S(\s的反義)匹配任意不是空白符的字符 ^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ 19.電話號碼:開頭3或4位數字或者不寫,短橫杠-寫或者不寫,后面7或8位數字 ^(\d{3,4}-?)?\d{7,8}$ 20.IP地址:匹配思想是先匹配XXX,再將.XXX重復3次 ^(25[0-5]|2[0-4] [0-9]|1[0-9] [0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4] [0-9]|1[0-9] [0-9]|[0-9]{1,2})){3}$ 21.匹配中文字符的正則表達式:不含中文標點。如果只判斷字符串是否含中文(而不要求全部由中文組成),可以寫作[\u4e00-\u9fa5] ^[\u4e00-\u9fa5]+$ 22.匹配首或尾空格的正則表達式: ^(\s)|(\s)$ 23.匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下划線): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 24.匹配騰訊QQ號:一般的QQ號最少5位,最多11位,首位不能為0 ^[1-9][0-9]{4,10}$ 25.只能輸入數字: ^[0-9]+$ 26.只能輸入n位的數字: ^\d{n}$ 27.只能輸入至少n位的數字: ^\d{n,}$ 28.只能輸入m ~n位的數字: ^\d{m,n}$ 29.只能輸入零和非零開頭的數字:這個正則不支持00或者002這樣的數據 ^(0|[1-9][0-9]*)$ 30.只能輸入有兩位小數的正實數: ^[0-9]+\.[0-9]{2}$ 31.只能輸入有1~3位小數的正實數: ^[0-9]+\.[0-9]{1,3}$ 32.只能輸入非零的正整數:支持45或者+4895這樣的表示,不支持+09或者0087這樣的表示 ^\+?[1-9][0-9]*$ 33.只能輸入非零的負整數:不支持-098這樣的表示 ^\-[1-9][0-9]*$ 34.只能輸入長度為3的字符串:支持“我愛你”這3個漢字的字符串,一個漢字是一個字符 ^.{3}$ 35.只能輸入由數字和26個英文字母組成的字符串: ^[A-Za-z0-9]+$ 36.只能輸入由數字和26個英文字母、下划線或漢字組成的字符串:\w表示匹配字母或數字或下划線或漢字 ^\w+$ 37.驗證是否包含有 %&',;=?$\"等字符:輸入09&輸出是true,因為含有&,如果要驗證字符^該怎么辦?^表示取反 [%&',;=?$\\]+