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

今天交学费,使用工行的网银转账,在转账的时候,发现客户输入的账号,没有自动的位数隔开的识别,比如说满四位就自动添加一个横线或者添加空格之类的东西。我相信基本上每个汇款的用户都会至少核对一遍账号,这样的一堆紧挨着的数字让人看起来真的是很不舒服的。偶然想起来,前一段时间学的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.正则表达式中的引用和缓存是一种想通的设计思想,当初在学习的时候,并没有主动的去思考这个问题,说明,在针对程序的编程思想上需要继续做更多的提炼和积累,这样将来在遇到类似的问题或者知识的时候,在潜意识中就会去引领自己思考,这样才体现出程序的灵魂所在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值