Javascript 正则表达式RegExp对象

Javascript 正则表达式RegExp对象

1、  实例属性

global……Boolean值,表示g(全局选项)是否已设置。

ignoreCase……Boolean值,表示i(忽略大小写选项)是否已设置。

lastIndex……整数,代表下次匹配将会从哪个字符位置开始(只有当使用exec()test()函数才会填入,否则为0)。

mulitiline……Boolean值,表示m(多行模式选项)是否已设置。

Source……正则表达式的源字符串形式。

2、  静态属性

长名

短名

描述

input

$_

最后用于匹配的字符串(传递exec()text()的字符串

lastMatch

$&

最后匹配的字符

lastParen

$+

最后匹配的分组

leftContext

$’

在上一次匹配的前面的子串

Multiline

$*

用于指定是否所有的表达式都使用多行模式的布尔值

rightContext

$’

在上次匹配之后的子串

注意:IEOpera并不支持RegExp.multiline,所以最好单独的对每个表达式设置m选项而不要直接设置这个标记。

3、  常用模式

3.1验证日期

dd/mm/yyyy的格式在欧洲很流行。

简单模式的写法:

var reDate=//d{1,2}///d{1,2}///d{4}/;

这个模式基本匹配格式dd/mm/yyyy,但并没有考虑到月份和天数的有效范围。如下,使用一个函数来检测日期是否有效。把正则表达式包装成函数。

function  isValidDate(sText)
{

        
var reDate=/(?:0[1-9]|[12][0-9]|3[01]}
) / ( ? : 0 [ 1 - 9 ] | 1 [ 0 - 2 ]) / ( ? : 19 | 20 d {2} ) / ;

        
return  reDate.test(sTest);

}

3.2验证信用卡号

MasterCard必须包含16位数字,前两个数字必须是51-55之间的数字。

function  isValidMasterCard(sText)
{

        
var reMasterCard=/^(5[1-5]d{2})[s-]?(d{4})[s-]?(d{4})[s-]?(d{4})$/;

        
if(reMasterCard.test(sText))

{
        Var sCardNum
=RegExp.$1+RegExp.$2+RegExp.$3+RegExp.$4;

        
//Luhn algorithm here

        Return luhnCheckSum(sCardNum);
}

else
{

        
return false;

}

}


 

Luhn算法有四步,第一步是从卡号的最后一个数字开始,并逆向地逐个将奇数位置(1、3等)的数字相加。要判断当前的这个数字是否偶数位置上,可以使用Boolean标志(bIsOdd),起始时标记为True。因为最后一个位置是15.下一步是将偶数位置的数字相加,但必须先将数字乘2.如果结果是两位数,必须将两个位上的数相加,然后将结果加入到总和中。

 

function  luhnCheckSum(sCardNum)
{
   
var iOddSum=0;
   
var iEvenSum=0;
   
var bIsOdd=true;
   
for(var i=sCardNum.length-1;i>=0;i--){
      
var iNum=parseInt(sCardNum.charAt(i));

      
if(bIsOdd){
         iOddSum
+=iNum;
      }
else{
         iNum
=iNum*2;
         
if(iNum>9){
            iNum
=eval(iNum.toString().split("").join("+"));
         }

         iEvenSum
+=iNum;
      }

      bIsOdd
=!bIsOdd;
   }

   
return ((iEvenSum+iOddSum)%10==0);
}

 以上代码分析:toString()方法将数字转化成字符串。split()将字符串分割成有两个数字的数组(如12将被分割为包含"1"和"2"的数组)。join()并用加号将数组组合起来,这样"1"和"2"将得到"1+2"。将最后的字符串传给eval(),它可将字符串翻译为代码并执行(这样"1+2"就返回3)。最后一步是将两个总和(从奇数部分和偶数部分得来的)相加并对结果进行取模(取余数)操作,如果数字是合法的,那么结果应该可以被10整除(也就是应该等于20,30,40等)。

其他卡:Visa卡号可能有13位或16位,并且首位数字总和为4,因此,匹配Visa卡号(不带空格)的模式如下:

 

function  isValidVisa(sTest) {
   
var reVisa=/^(4d{12}(?:d{3})?)$/;
   
if(reVisa.test(sText)){
      
return luhnCheckSum(RegExp.$1);
   }
else{
      
return false;
   }

}

关于更多信用卡号模式和使用Luhn算法的信息,可以查http://www.beachnet.com/~hstiles/cardtype.html

   3.3验证电子邮件地址

   代码如下:

 

function  isValidEmail(sText) {
   
var reEmail = /^(?:w+.?)*w+@(?:w+.?)*w+$/;
   
return reEmail.test(reEmail );
}

可以这样调用这个函数:

alert("john.doe@somewhere.com");   //outputs "true"

alert("john.doe@somewhere.");           //outputs "false"

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值