正則表達式在項目中用時常還是會用到的,不過寫起來還是要費些工夫的,於是搜集了一些常用的正則,就不用每次都要自己寫了。君子善假於物也,借助現有的經驗資料以提高編程的效率。
匹配中文字符的正則表達式:
[\u4e00-\u9fa5]
[\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):
[^\x00-\xff]
[^\x00-\xff]
匹配回車換行符:
[(\r\n)]
[(\r\n)]
匹配文件路徑是否合法:
[^(([a-zA-Z]:)|(\\{2}\w+)\$?)(<a href="file://\\(\w[\w">\\(\w[\w</a>]*.*))]
[^(([a-zA-Z]:)|(\\{2}\w+)\$?)(<a href="file://\\(\w[\w">\\(\w[\w</a>]*.*))]
匹配是否為數字:
!(Regex.IsMatch(對象, @"^\d+$")))//表示不是全數字
!(Regex.IsMatch(對象, @"^\d+$")))//表示不是全數字
匹配空行的正則表達式:
\n[\s|]*\r
\n[\s|]*\r
匹配HTML標記的正則表達式:
/<(.*)>.*<\/\1>|<(.*) \/>/
/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:
(^\s*)|(\s*$)
(^\s*)|(\s*$)
匹配Email地址的正則表達式:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
@"^\s*([A-Za-z0-9_-]+(\.\w+)*@(\w+\.)+\w{2,3})\s*$"
@"^\s*([A-Za-z0-9_-]+(\.\w+)*@(\w+\.)+\w{2,3})\s*$"
@"^\w+((-\w+)|(\.\w+))*\@{1}\w+\.{1}\w{2,4}(\.{0,1}\w{2}){0,1}"
@"^\w+((-\w+)|(\.\w+))*\@{1}\w+\.{1}\w{2,4}(\.{0,1}\w{2}){0,1}"
匹配網址URL的正則表達式:
http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
匹配電話號碼的正則表達式:
@"^(\(\d{3,4}\)|\d{3,4}-?)?\d{7,8}$"
@"^(\(\d{3,4}\)|\d{3,4}-?)?\d{7,8}$"
匹配手機號碼的正則表達式:
通用的:@"^1[0-9]{10}$"
通用的:@"^1[0-9]{10}$"
/*描述不同公司手機號碼規則的正則表達式
* *cmcc-中國移動手機號碼規則
* *cucc-中國聯通手機號碼規則
* *cnc--中國網通3G手機號碼規則*/
String cmcc = "^[1]{1}(([3]{1}[4-9]{1})|([5]{1}[89]{1}))[0-9]{8}$"
String cucc = "^[1]{1}(([3]{1}[0-3]{1})|([5]{1}[3]{1}))[0-9]{8}$"
String cnc = "^[1]{1}[8]{1}[89]{1}[0-9]{8}$"
/*描述不同公司手機號碼規則的正則表達式
* *cmcc-中國移動手機號碼規則
* *cucc-中國聯通手機號碼規則
* *cnc--中國網通3G手機號碼規則*/
String cmcc = "^[1]{1}(([3]{1}[4-9]{1})|([5]{1}[89]{1}))[0-9]{8}$"
String cucc = "^[1]{1}(([3]{1}[0-3]{1})|([5]{1}[3]{1}))[0-9]{8}$"
String cnc = "^[1]{1}[8]{1}[89]{1}[0-9]{8}$"
匹配身份證號碼的正則表達式:
通用匹配,@"^(\d{14}|\d{17})(\d|[xX])$"
通用匹配,@"^(\d{14}|\d{17})(\d|[xX])$"
一個精確匹配的例子,不過只能匹配1900-2000之間的,
@"^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$"
一個精確匹配的例子,不過只能匹配1900-2000之間的,
@"^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$"
匹配車牌號的正則表達式:
/^陝[A-M]-[A-Z0-9][0-9]{4}$/
/^陝[A-M]-[A-Z0-9][0-9]{4}$/
用正則表達式實現javascript中類似trim的功能:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
用正則表達式計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1):
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
用正則表達式分解和轉換IP地址:
1、用正則表達式匹配IP地址,並將IP地址轉換成對應數值的Javascript函數:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
2、直接用split函數Ip:
var ip="10.100.20.168"
ipip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
用正則表達式從URL地址中提取文件名的javascript程序,如下結果為page1
s="http://www.9499.net/page1.htm"
ss=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)
用正則表達式限制網頁表單裡的文本框輸入內容。
用正則表達式限制只能輸入中文:
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
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(/[^\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(/[^\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,''))"
onkeyup="value=value.replace(/[\W]/g,'') "
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正則表達式截取指定字符之間的內容:
Regex regx = new Regex(@"開始 ([\w\W]*?)結束");
Match mach = regx.Match( @"要截取的字符串");
string str = mach.Value;
str = Regex.Replace(str,@"開始 ", "");
str = Regex.Replace(str,@"結束", "");
Regex regx = new Regex(@"開始 ([\w\W]*?)結束");
Match mach = regx.Match( @"要截取的字符串");
string str = mach.Value;
str = Regex.Replace(str,@"開始 ", "");
str = Regex.Replace(str,@"結束", "");
比如,有個字符串:‘CSDN博客頻道’,想把把‘博客’兩個字取出來如下:
Regex regx = new Regex(@"CSDN ([\w\W]*?)頻道");
Match mach = regx.Match(@"CSDN博客頻道");
string str = mach.Value;
str = Regex.Replace(str,@"CSDN ", "");
str = Regex.Replace(str,@"頻道", "");
Regex regx = new Regex(@"CSDN ([\w\W]*?)頻道");
Match mach = regx.Match(@"CSDN博客頻道");
string str = mach.Value;
str = Regex.Replace(str,@"CSDN ", "");
str = Regex.Replace(str,@"頻道", "");
結果:str="博客";
摘自 白楊樹