表单提交合法性检测
时间:2010-05-28 来源:mx11
<HEAD>
<SCRIPT LANGUAGE="JAVASCRIPT">
<!--
FUNCTION TESTKEY(E){
CHARS= "0123456789/";
E = WINDOW.EVENT;
IF(CHARS.INDEXOF(STRING.FROMCHARCODE(E.KEYCODE))==-1) WINDOW.EVENT.KEYCODE=0;
};
FUNCTION VALDATE(M, D, Y){
MONTHS= NEW ARRAY(31,28,31,30,31,30,31,31,30,31,30,31);
LEAP = FALSE;
IF((Y % 4 == 0) && ((Y % 100 != 0) || (Y %400 == 0)))
LEAP = TRUE;
IF((D < 1) || (D > 31) || (M < 1) || (M > 12) || (Y < 0))
RETURN(FALSE);
IF((D > MONTHS[M-1]) && !((M == 2) && (D > 28)))
RETURN(FALSE);
IF(!(LEAP) && (M == 2) && (D > 28))
RETURN(FALSE);
IF((LEAP) && (M == 2) && (D > 29))
RETURN(FALSE);
};
FUNCTION FORMATDATE(DATEFORM){
CDATE = DATEFORM.VALUE;
DSIZE = CDATE.LENGTH;
SCOUNT= 0;
IF (DOCUMENT.FORM1.DATE.VALUE == ""){
ALERT("请输入日期!");
RETURN FALSE ;
}
IF(CDATE==') RETURN;
FOR(VAR I=0; I < DSIZE; I++)
(CDATE.SUBSTR(I,1) == "/") SCOUNT++ : SCOUNT;
IF (SCOUNT != 2){
ALERT("输入的日期格式必须是 '月/日/年'");
DATEFORM.SELECT();
RETURN(FALSE);
};
//检测输入的年份是2位数还是4位数;
YSIZE = CDATE.SUBSTRING(CDATE.LASTINDEXOF("/")+1,DSIZE).LENGTH
IF(YSIZE<2 || YSIZE>4 || YSIZE == 3){
ALERT('您输入的日期错误 !');
DATEFORM.SELECT();
RETURN FALSE;
};
//将输入的日期字符串分隔成3部分 (MONTH, DAY & YEAR)
IDXBARI = CDATE.INDEXOF("/");
IDXBARII= CDATE.LASTINDEXOF("/");
STRM = CDATE.SUBSTRING(0,IDXBARI);
STRD = CDATE.SUBSTRING(IDXBARI+1,IDXBARII);
STRY = CDATE.SUBSTRING(IDXBARII+1,DSIZE);
STRM = (STRM.LENGTH < 2 '0'+STRM : STRM);
STRD = (STRD.LENGTH < 2 '0'+STRD : STRD);
IF(STRY.LENGTH == 2)
STRY = (STRY > 50 '19'+STRY : '20'+STRY);
DATEFORM.VALUE = STRM+'/'+STRD+'/'+STRY;
OK = VALDATE(STRM, STRD, STRY);
IF(OK==FALSE){
ALERT("您输入的日期错误 !");
DATEFORM.SELECT();
RETURN FALSE;
};
};
-->
</SCRIPT>
<TITLE>日期合法性检测</TITLE>
</HEAD>
<BODY ONLOAD="JAVASCRIPT:DOCUMENT.FORM1.DATE.FOCUS()" BGCOLOR="#FFFFFF">
<FORM NAME="FORM1" METHOD="POST" ONSUBMIT="RETURN TESTKEY(EVENT)" ACTION="">
输入正确的日期(月/日/年):
<INPUT TYPE=TEXT MAXLENGTH =10 NAME="DATE" SIZE=10 ONBLUR="FORMATDATE(THIS)" VALUE="">
</FORM>
</BODY>
</HTML>
说明:此脚本的用途是比较全面地检测输入日期的合法性,除了做非空检测外,还有效地检测了不同年月日期的合法性问题。比如在不是闰年的2月输入了29日等。黄色代码与脚本的检测无关,作用是页面读出页面后光标停留在日期文本框内。可以不要。
注意:(1)<FORM>标签中表单的名字FORM1和日期文本框的名字DATA(加重字体)与脚本是有关的,也就是说你如果改动了它们的名字,凡是在脚本中引用FROM1和DATA的部分都要修改。切切!!!
(2)JAVASCRIPT是大小写敏感的,所以注意大小写的区别和一致性原则。
(3)此脚本应该与CGI/ASP等服务器端的递交处理程序配合使用,用于客户端的合法性检测。本例没有将SUBMIT按钮作上去,你所处理的表单中可能包括更多的内容。
这里仅仅提供了一个脚本思路,你不一顶非要全部照搬脚本,可以仅仅取脚本的一部分使用(主要是算法)。 --------------------------
12.1.4 表单递交的合法性检测
在某些网站注册时,要求用户输入一定长度的用户名、密码和E-mail等。网站对用户名长度的检测和E-mail格式的检测就属于表单递交的合法性检测的范围。表单递交的合法性检测还包括输入信息是否包含某些字符、是否全是数字、是否全是字母等。下面定义了几个合法性检测的过程。
不允许包含指定字符的检测:
<%
Function Validate(str) 'str为要检测的字符串
Validate = True '初始化
invalid = " " '非法字符为空,也可以写为其他字符
if InStr(str,invalid)>0 Then 'str字符串中存在invalid字符
Validate = False
End If
End Function
%>
只能输入数字的检测可以使用IsNumeric()函数来实现。
只能输入字母的检测:
<%
Function CheckLetter(str) 'str为要检测的字符串
CheckLetter = True '初始化
Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" '初始化
for i=1 to len(str) 'len()函数返回字符串长度
'Mid(str,i,1) 返回字符串str第i个字符,UCase()函数将该字符转换为大写形式
checkchar = UCase(Mid(str,i,1))
If (InStr(Letters,checkchar)<=0) Then 'checkchar在Letters中不存在
CheckLetter = False
Exit Function '跳出Function过程
End If
Next '结束For循环
End Function
%>
E-mail格式的合法性检测:
<%
Function IsValidEmail(email) '定义过程
Dim names, name, i, c
IsValidEmail = TRUE '初始化
'使用@字符将email字符串分成几个子字符串并保存在names数组中
names = Split(email, "@")
'Ubound()函数返回数组names的最大下标,Ubound(names)<>1表明email字符串中存在
'的@字符并不是一个,所以email不是有效的邮件地址格式
If UBound(names) <> 1 Then
IsValidEmail = FALSE
Exit Function '跳出Function过程
End If
For Each name in names '数组names中的每一个元素
If Len(name) <= 0 Then '字符串name内字符的数目
IsValidEmail = FALSE
Exit Function '跳出Function过程
End If
For i = 1 To Len(name) 'For循环
'Mid(name,i,1) 返回字符串name内第i个字符,LCase()函数将该字符转换成小写形式
c = LCase(Mid(name, i, 1))
'InStr()函数返回某字符串在另一字符串中第一次出现的位置。
'InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0表明字符c不在字符
'串"abcdefghijklmnopqrstuvwxyz_-."中。IsNumeric(c)判断字符c是否为数字
If InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 _
AND NOT IsNumeric(c) Then '不支持中文格式地址
IsValidEmail = FALSE
Exit Function '跳出Function过程
End If
Next '结束For to循环
'left(name,1)返回字符串name最左边一个字符。Right(name,1)返回字符串name最右边一个字符
If Left(name, 1) = "." or Right(name, 1) = "." Then
IsValidEmail = FALSE
Exit Function '跳出Function过程
End If
Next '结束For each循环
'email字符串中@右边部分不包含字符"."
If InStr(names(1), ".") <= 0 Then
IsValidEmail = FALSE
Exit Function
End If
'InStrRev()函数返回某字符串在另一个字符串中出现的从结尾计起的位置
'InStrRev(names(1), ".")得到字符"."在字符串names(1)中从结尾计起的位置
i = Len(names(1)) - InStrRev(names(1), ".")
'电子邮件最后一般为cn或com,长度为2或3
If i <> 2 AND i <> 3 Then
IsValidEmail = FALSE
Exit Function
End If
If InStr(email, "..") > 0 Then 'email中存在字符串".."
IsValidEmail = FALSE
End If
End Function
%>
---------------------
表单递交合法性检测-只接受数字
如下代码加入HTML的<head>区:
<SCRIPT LANGUAGE="JavaScript">
function numericCheck(){
nr1=document.myform.content.value;
flg=0;
str="";
spc=""
arw="";
for (var i=0;i<nr1.length;i++){
cmp="0123456789"
tst=nr1.substring(i,i+1)
if (cmp.indexOf(tst)<0){
flg++;
str+=" "+tst;
spc+=tst;
arw+="^";
}
else{arw+="_";}
}
if (flg!=0){
if (spc.indexOf(" ")>-1) {
str+="和空格";
}
alert("这里只接受数字,发现"
+flg+"个不可接受的字符:\n"+str);
return false;
}
}
</SCRIPT>
如下代码加入HTML的<body>区,表单递交部分:
<form name="myform" method="post" enctype="text/plain" onsubmit="return numericCheck()" action="mailto:[email protected]">
<INPUT TYPE="text" name="content">
<INPUT TYPE="submit" NAME="submit" VALUE="递交">
</form>
注意:表单的名字和文本框的名字要保持前后一样。
-----------------
表单递交合法性检测-只允许填写字母
表单递交合法性检测-只允许填写字母 由吾搜网06月28日自WWW.WUSOU.NET收集后精心整理,欢迎阅览!
<script language="JavaScript">
<!--
function CheckForm()
{
if (document.form.yourname.value == "" )
{
alert ("请输入姓名!");
return false;
}
var Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for (i=0; i < document.form.yourname.value.length; i++)
{
var CheckChar = document.form.yourname.value.charAt(i);
CheckChar = CheckChar.toUpperCase();
if (Letters.indexOf(CheckChar) == -1)
{
alert ("请输入英文姓名!");
return false;
}
}
}
// -->
</Script>
<form action="" name="form" method="post" onSubmit="return CheckForm()">
<div align="center">
<input type="text" name="yourname">
<input type="submit" name="submit" value="submit">
</div>
</form>
吾搜网感谢《表单递交合法性检测-只允许填写字母 》教程原编写站长吾搜网整理,ASP编程教程的完善源自于你们无私的共享!
--------------------------------
这个可以写小数
<input name=A"& rs1("Kpi_YGJX_SJ_MX_ZBXH") &" type=text onkeypress='if (event.keyCode!=46 && event.keyCode!=45 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false' size=30 STYLE=width:60px;FONT:12px宋体;overflow:hidden value="& rs1("Kpi_YGJX_SJ_MX_QZ") &"></td></tr>"
这个只能写数字
<input name=A"& rs1("Kpi_YGJX_SJ_MX_ZBXH") &" type=text onkeyup="this.value=this.value.replace(/\D/g,'')" size=30 STYLE=width:60px;FONT:12px宋体;overflow:hidden value="& rs1("Kpi_YGJX_SJ_MX_QZ") &"></td></tr>"