正则表达式&HTC验证数据有效性源码
msdn上有一个数据验证的HTC的例子,不过不是用正则表达式验证的,我做了一个用正则表达式验证数据有效性程序,源码如下,分别将test.htm和mask.htc保存到同一个文件中,打开test.htc并且输入数据,可以看到相应的效果。
test.htm文件内容:
<html>
<head>
<title>数据有效性检查</title>
<style>
input
{
background:"#EEEEEE";
behavior:url('mask.htc');
font-size:"13px";
color:"blue";
font-family:"verdana";
}
</style>
</head>
<body>
有效性检查:<br>
<table >
<thead><tr><th>类型</th><th>输入</th></tr></thead>
<tr><td align="right">normal:</td><td><input type="text"></td></tr>
<tr><td align="right">int:</td><td><input type="text" preset="int"></td></tr>
<tr><td align="right">float:</td><td><input type="text" preset="float"></td></tr>
<tr><td align="right">tel:</td><td><input type="text" preset="tel"></td></tr>
<tr><td align="right">email:</td><td><input type="text" preset="email"></td></tr>
<tr><td align="right">date:</td><td><input type="text" preset="date"></td></tr>
<tr><td align="right">zip:</td><td><input type="text" preset="zip"></td></tr>
<tr><td align="right">age:</td><td><input type="text" preset="age"></td></tr>
</tbody>
</table>
</body>
</html>
mask.htc文件内容:
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="initIt()" />
<script language=javascript>
var oldValue="";
var isRight=true;
var intReg = /^(([1-9]\d*)|(0))$/;
var floatReg = /^((([1-9]\d*).(\d+))|(0.\d+)|(\d+))$/;
var telReg = /^(((\d{3,4})-(\d{7,8}))|(13\d{9}))$/;
var emailReg =/^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z]{2,3}$/; ///^((([a-zA-Z]|_)+)(\w|_*)*)@$/;///^(((\w|_*)+)@((\w|_*)+)((.(\w)+)+))$/
var dateReg = /^\d{4}-(([1-9]|0[1-9])|11|12)-([1-9]|0[1-9]|[1-2]\d|30|31)$/;
var zipReg = /^\d{6}$/;
var ageReg = /^(([1-9]\d?)|(1[0-1]{1}\d{1}))$/;//最大可接受年龄119。
function initIt(){
if(element.type=="text"&&element.preset!=null&&element.preset!=""){
element.attachEvent("onblur", checkIt);
element.attachEvent("onfocus",focusIt);
}
else return;
if(element.preset=="date"&&element.size==20){
element.size=10;
var date = new Date();
var tempDate = date.getYear()+"-"+date.getMonth()+"-"+date.getDate();
oldValue = tempDate;
isRight=false;
}
if(element.preset=="zip"&&element.size==20){
element.size=6;
}
if(element.preset=="age"&&element.size==20){
element.size=3;
}
}
/**
*进行合法性检查
*/
function checkIt(){
if(type!="text") return;
switch(preset){
case "int":
mask(intReg,0);
break;
case "float":
mask(floatReg,"0.0");
break;
case "tel":
mask(telReg,"");
break;
case "email":
mask(emailReg,"");
break;
case "zip":
mask(zipReg,"");
break;
case "date":
var date = new Date();
var tempDate = date.getYear()+"-"+date.getMonth()+"-"+date.getDate();
mask(dateReg,tempDate);
break;
case "age":
mask(ageReg,"1");
break;
case "str":
break;
default: break;
}
}
/**
*整型数据检查
*/
function mask(reg,defaultValue){
//用正则表达式判断整开数据
if(!reg.test(element.value)){
oldValue = element.value;
element.value=defaultValue;
isRight=false;
}else{
isRight = true;
formatIt();
}
//alert(isRight);
}
/**
*对数据进行格式处理
*/
function formatIt(){
var tempStr = element.value;
if(element.preset=="float"&&tempStr.indexOf(".")<0){
element.value=tempStr+".00";
}
}
/**
*得到焦点时,将不合法的值显示出来,并全部选中。
*/
function focusIt(){
if(type!="text") return;
if(!isRight){
element.value=oldValue;
element.select();
}
}
</script>
</PUBLIC:COMPONENT>