您的位置:首页 > Web前端 > JavaScript

银行转账引起的js正则的一点小感慨

2013-04-30 23:53 183 查看
今天交学费,使用工行的网银转账,在转账的时候,发现客户输入的账号,没有自动的位数隔开的识别,比如说满四位就自动添加一个横线或者添加空格之类的东西。我相信基本上每个汇款的用户都会至少核对一遍账号,这样的一堆紧挨着的数字让人看起来真的是很不舒服的。偶然想起来,前一段时间学的js的关于这块儿的匹配处理,现在把教程上的代码,整理出来,重新回顾一下js正则表达式的使用。

var reMasterCard =/^5[1-5]\d{14}$/;	//^表示开头,$表示结尾

//实际中可能有空格和横线
var reMasterCard =/^5[1-5]\d{2}[\s\-]?\d{4}[\s\-]?\d{4}[\s\-]?\d{4}$/;

//使用捕获型分组,以备将来验证唯一性
var reMasterCard =/^(5[1-5]\d{2})[\s\-]?(\d{4})[\s\-]?(\d{4})[\s\-]?(\d{4})$/;

//构建函数:
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;
		//此处添加逻辑处理,调用验证的方法
		return luhnCheckSum(sCardNum);
	}else{
		return false;
	}
}


Luhn算法:

function luhnCheckSum(sCardNum){
	var iOddSum =0;
	var bIsOdd=true;
	for (var i = sCardNum.length-1;i=0;i--){
	
		var iNum =parseInt(sCardNum.charAt(i));
	
		//将奇数位上的数字相加
		if(bIsOdd){
			iOddSum+=iNum;	
		//将偶数位上的数字*2后相加
		}else{
			iNum =iNum*2;
			//如果加起来的数字为两位数,那么就将个位和十位的数字相加得到新的位数,
			if(iNum>9){
				iNum=eval(iNum.toString().split("").join("+"));	
			}
			//将所有的偶数位上的数字相加
			iEvenSum+=iNum;
		}

		bIsOdd=!=bIsOdd;
	}

	//判断,循环完后,奇数为的和与偶数位的和相加后的结果是否可以被10整除
	rerurn ((iEvenSum+iOddSum)%10==0);
	
}
调用:
alert(isValidMasterCard("5432 1234 5678 9012"));	//false
alert(isValidMasterCard("5432-1234-5678-9012"));	//false
alert(isValidMasterCard("5432123456789012"));	//false



总结:

1.js的正则表达式规则跟C#大致相似,区分脱字符(^)和表示开头的^符号的一个方法是,表示托字符的^要放到[]中,表示开头的^不能放到[]中。

2.正则表达式中的引用和缓存是一种想通的设计思想,当初在学习的时候,并没有主动的去思考这个问题,说明,在针对程序的编程思想上需要继续做更多的提炼和积累,这样将来在遇到类似的问题或者知识的时候,在潜意识中就会去引领自己思考,这样才体现出程序的灵魂所在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: