【JS】使用JS正则式对前端文本框进行校验,此文本框与后台字段直接关联,类型为Oracle的number(12,2)
【要解决的问题】
前台有一输入框,直接与后台某表某字段关联,此字段是number(12,2)类型,要求前台用JS限制用户输入,直到其符合后台的数据格式。
【需求分析】
Oracle的Number(12,2),其小数位最多为两位,整数位最多为十位。对此存疑请参考:https://www.cnblogs.com/heyang78/p/15887408.html
据此写出的正则分整数部分和小数部分,整数部分限制在十位,小数部分限制为一到二位,且和小数点一起出现。
【正则】
^(\\d{1,10})([.]\\d{1,2})?$
【代码】
<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
<title>Filename</title>
</head>
<body onload="run();">
</body>
</html>
<script type="text/javascript">
<!--
function run(){
var arr=[];
arr.push({'value':1,'expected':true,'reason':'限制在10位整数范围内','actual':true});
arr.push({'value':1.23,'expected':true,'reason':'限制在10位整数两位小数范围内','actual':true});
arr.push({'value':1234567890,'expected':true,'reason':'限制在10位整数范围内','actual':true});
arr.push({'value':12345678901,'expected':false,'reason':'越过了10位整数范围','actual':true});
arr.push({'value':0.123,'expected':false,'reason':'小数位超过了2位','actual':true});
arr.push({'value':1234567890.99,'expected':true,'reason':'整数位未超过10小数位未超过2','actual':true});
for (var i=0,n=arr.length;i<n ;i++ ){
var item=arr[i];
var result=isValid(item.value);
item.actual=result;
}
for(var item of arr){
console.log("数%f%s%s,预期值%s,理由:%s,实际值%s;",item.value,item.actual?'符合':'不符合','number(12,2)格式',item.expected,item.reason,item.actual);
}
}
//----------------------------------------------
// 后台字段定义是oracle的number(12,2)
// 前台以此书写正则对输入进行验证
//----------------------------------------------
function isValid(text){
var reg='^(\\d{1,10})([.]\\d{1,2})?$';
var regExp=new RegExp(reg);
return regExp.test(text);
}
//-->
</script>
以上粗体部分为核心校验函数。
【运行结果】
数1符合number(12,2)格式,预期值true,理由:限制在10位整数范围内,实际值true; 数1.23符合number(12,2)格式,预期值true,理由:限制在10位整数两位小数范围内,实际值true; 数1234567890符合number(12,2)格式,预期值true,理由:限制在10位整数范围内,实际值true; 数12345678901不符合number(12,2)格式,预期值false,理由:越过了10位整数范围,实际值false; 数0.123不符合number(12,2)格式,预期值false,理由:小数位超过了2位,实际值false; 数1234567890.99符合number(12,2)格式,预期值true,理由:整数位未超过10小数位未超过2,实际值true;
END

浙公网安备 33010602011771号