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 | $’ | 在上次匹配之后的子串 |
注意:IE和Opera并不支持RegExp.multiline,所以最好单独的对每个表达式设置m选项而不要直接设置这个标记。
3、 常用模式
3.1验证日期
dd/mm/yyyy的格式在欧洲很流行。
简单模式的写法:
var reDate=//d{1,2}///d{1,2}///d{4}/;
这个模式基本匹配格式dd/mm/yyyy,但并没有考虑到月份和天数的有效范围。如下,使用一个函数来检测日期是否有效。把正则表达式包装成函数。
... {
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之间的数字。
... {
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.如果结果是两位数,必须将两个位上的数相加,然后将结果加入到总和中。
... {
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卡号(不带空格)的模式如下:
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验证电子邮件地址
代码如下:
var reEmail = /^(?:w+.?)*w+@(?:w+.?)*w+$/;
return reEmail.test(reEmail );
}
可以这样调用这个函数:
alert("john.doe@somewhere.com"); //outputs "true"
alert("john.doe@somewhere."); //outputs "false"