非常全的JS正则表达式


//去除左侧空格 

function LTrim(str) {

     return str.replace(/^\s*/g,"");

 }


 //去右空格

 function RTrim(str) {

      return str.replace(/\s*$/g,""); 

}


 //去掉字符串两端的空格 

function trim(str) {

      return str.replace(/(^\s*)|(\s*$)/g, ""); 

 } 


//去除字符串中间空格 

function CTim(str) {

        return str.replace(/\s/g,''); 


//是否为由数字组成的字符串 

function is_digitals(str) { 

      var reg=/^[0-9]*$/;//匹配整数 return reg.test(str);       

}


 //验证是否为整数,包括正负数;

 function Is_Int(str) { 

       var reg=/^(-|\+)?\d+$/; return reg.test(str);

 } 


//是大于0的整数 

 function Is_positive_num(str) { 

         var reg=/^\d+$/; return reg.test(str);

}


 //负整数的验证

 function Is_minus(str) {

      var reg=/^-\d+$/; return reg.test(str); 

}


 //验证是否为浮点数(正数)

 function IsPositiveFloat(str) { 

          var check_float =new RegExp("^[1-9][0-9]*\.[0-9]+$");

//匹配浮点数

return check_float.exec(str); 


//是否为固定电话,区号3到4位,号码7到8位,区号和号码用"-"分割开,转接号码为1到6位,用小括号括起来紧跟在号码后面

 function IsTelphone(str) {

       var reg=/^[0-9]{3,4}\-\d{7,8}(\(\d{1,6}\))?$/;          

       if (reg.test(str)) return true;     

       else         return false;

 }


//验证是否为手机号码

function checkMobile(){ 
    var sMobile = document.mobileform.mobile.value 
    if(!(/^1[3|5][0-9]\d{4,8}$/.test(sMobile))){ 
        alert("不是完整的11位手机号或者正确的手机号前七位"); 
        document.mobileform.mobile.focus(); 
        return false; 
    } 


//验证是否为中文

 function IsChinese(str) { 

         var reg=/^[\u0391-\uFFE5]+$/; 

         return reg.test(str); 


//验证是否为qq号码,长度为5-10位
function IsQq(str)
{
var reg=/^[1-9]\d{4,9}$/;
return reg.test(str);
}

//验证邮编
function IsPostId(str)
{
var reg=/^\d{6}$/;
return reg.test(str);
}

//验证是否未email
function IsEmail(str)
{
var reg=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
return reg.test(str);
}

//验证IP地址
function IsIp(str)
{
var check=function(v){
try
{
   return (v<=255 && v>=0)
}catch(x){
    return false;
   }
}
var re=str.split(".")
return (re.length==4)?(check(re[0]) && check(re[1]) &&check(re[2]) && check(re[3])):false
}


//身份证验证
function IsIdnum(str)
{
var City={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",
     31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",
     43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",
     61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "}
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(str))
return false;
str=str.replace(/x$/i,"a");
if(City[parseInt(str.substr(0,2))]==null)
{
alert( "Error:非法地区");
return false;
}
sBirthday=str.substr(6,4)+"-"+Number(str.substr(10,2))+"-"+Number(str.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-"+ d.getDate()))
{
alert("Error:非法生日");
return false;
}
for(var i = 17;i>=0;i --)
iSum += (Math.pow(2,i) % 11) * parseInt(str.charAt(17 - i),11)
if(iSum%11!=1)
{
alert("Error:非法证号");
return false;
}
returnCity[parseInt(str.substr(0,2))]+","+sBirthday+","+(str.substr(16,1)%2?"男":"女")
}



//判断是否短时间,形如 (13:04:06)
function IsTime(str)
{
var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);
if (a == null)
{
alert('输入的参数不是时间格式'); return false;
}
if (a[1]>24 || a[3]>60 || a[4]>60)
{
alert("时间格式不对");
return false
}
return true;
}



//短日期,形如 (2003-12-05)
function IsDate(str)
{
var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if(r==null)
return false;
var d= new Date(r[1], r[3]-1, r[4]);
return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}



// 长时间,形如 (2003-12-05 13:04:06)
function IsDateTime(str)
{
var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$/;
var r = str.match(reg);
if(r==null)
return false;
var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
}



// 判断字符全部由a-Z或者是A-Z的字字母组成
function Is_Letters(str)
{
var reg=/[^a-zA-Z]/g;
return reg.test(str);
}



// 判断字符由字母和数字组成。
function Is_letter_num(str)
{
var reg=/[^0-9a-zA-Z]/g;
return reg.test(str);
}


//判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母
function IsUserName(str)
{
var reg=/^([a-zA-z_]{1})([\w]*)$/g;
return reg.test(str);
}


// 判断浏览器的类型
function GetBrowseType()
{
alert(window.navigator.appName);
}


//判断ie的版本
function Get_Eidition()
{
alert(window.navigator.appVersion);
}


//判断客户端的分辨率
function GetResolution()
{
alert(window.screen.height);
alert(window.screen.width);
}


// 判断用户名是否为数字字母下滑线
function notchinese(str)
{
var reg=/[^A-Za-z0-9_]/g
    if (reg.test(str))
{
      return (false);
    }
else
{
return(true);
    }
}   
      


//验证url
function IsUrl(str)
{
varreg=/^(http\:\/\/)?([a-z0-9][a-z0-9\-]+\.)?[a-z0-9][a-z0-9\-]+[a-z0-9](\.[a-z]{2,4})+(\/[a-z0-9\.\,\-\_\%\?\=\&]?)?$/i;
return reg.test(str);
}

//判断是否含有汉字       
function ContentWord(str)
{
if (escape(str).indexOf("%u")!=-1)
return true;
else
return false;
}

//页面里回车到下一控件的焦点
function Enter2Tab(e)
{
    try
    {
        var ōb = IsFireFox ? e.target :event.srcElement;
        if(ob.tagName == "INPUT"&&(ob.type == "text" ||ob.type == "password"||ob.type == "checkbox"
         ||ob.type =="radio") ||ob.tagName == "SELECT")
        {
            var key =IsFireFox ? e.which : event.keyCode;
            if (key ==13)
            {
               if (IsFireFox)
               {
                   event.which = 9;
               }
               else
               {
                   event.keyCode = 9;
               }
            }
        }
    }
    catch(E){}
}




正则表达式中的常用模式

下面是正则表达式中的一些常用模式。

/pattern/

结果

.

匹配除换行符以外的所有字符

x?

匹配 0 次或一次 x 字符串

x*

匹配 0 次或多次 x 字符串,但匹配可能的最少次数

x+

匹配 1 次或多次 x 字符串,但匹配可能的最少次数

.*

匹配 0 次或一次的任何字符

.+

匹配 1 次或多次的任何字符

{m}

匹配刚好是 m 个 的指定字符串

{m,n}

匹配在 m个 以上 n个 以下 的指定字符串

{m,}

匹配 m个 以上 的指定字符串

[]

匹配符合 [] 内的字符

[^]

匹配不符合 [] 内的字符

[0-9]

匹配所有数字字符

[a-z]

匹配所有小写字母字符

[^0-9]

匹配所有非数字字符

[^a-z]

匹配所有非小写字母字符

^

匹配字符开头的字符

$

匹配字符结尾的字符

\d

匹配一个数字的字符,和 [0-9] 语法一样

\d+

匹配多个数字字符串,和 [0-9]+ 语法一样

\D

非数字,其他同 \d

\D+

非数字,其他同 \d+

\w

英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样

\w+

和 [a-zA-Z0-9]+ 语法一样

\W

非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样

\W+

和 [^a-zA-Z0-9]+ 语法一样

\s

空格,和 [\n\t\r\f] 语法一样

\s+

和 [\n\t\r\f]+ 一样

\S

非空格,和 [^\n\t\r\f] 语法一样

\S+

和 [^\n\t\r\f]+ 语法一样

\b

匹配以英文字母,数字为边界的字符串

\B

匹配不以英文字母,数值为边界的字符串

a|b|c

匹配符合a字符 或是b字符 或是c字符 的字符串

abc

匹配含有 abc 的字符串

(pattern)

() 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去。

/pattern/i

i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。

\

如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 \ 符号,这样才会让特殊字符失效

 

下面给出一些例子:    

范例

说明

/perl/

找到含有 perl 的字符串

/^perl/

找到开头是 perl 的字符串

/perl$/

找到结尾是 perl 的字符串

/c|g|i/

找到含有 c 或 g 或 i 的字符串

/cg{2,4}i/

找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串

/cg{2,}i/

找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串

/cg{2}i/

找到 c 后面跟着 2个 g,再跟着 i 的字符串

/cg*i/

找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i/

/cg+i/

找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/

/cg?i/

找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/

/c.i/

找到 c 后面跟着一个任意字符,再跟着 i 的字符串

/c..i/

找到 c 后面跟着二个任意字符,再跟着 i 的字符串

/[cgi]/

找到符合有这三个字符任意一个的字符串

/[^cgi]/

找到没有这三个字符中任意一个的字符串

/\d/

找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串

/\D/

找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的字符串

/\*/

找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 \ 符号,这样才会让这个特殊字符失效

/abc/i

找寻符合 abc 的字符串而且不考虑这些字符串的大小写




匹配中文字符的正则表达式: [u4e00-u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:ns*r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:< (S*?)[^>]*>.*?|< .*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

 

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字

匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或18位

匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)

^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
^(0|[1-9]/d*)(/./d*)?$ //匹配正实数

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值