此程序在window2k下测试通过.在Linux尚末测试.
一JavaScript源程序
**
*文件名:check.js
*JavaScript程序
*客户端验证数函数
*请可存源文件的完整性,尊重每一份执爱开源的辛苦付出
*/
//检验字符是否包函非法字符
function havegg(elem){
var str = "~!@%^&*();'/"?><[]{}//|,:/=+—“”‘";
for(i=0;i<elem.length;i++)
if (str.indexOf(elem.charAt(i)) !=-1){
return false;
}
return true;
}
//判断字符由字母和数字,下划线组成.且开头的只能是下划线和字母
function isUserId(elem){
var pattern=/^(/b[a-zA-Z]|/b_)([a-zA-Z0-9]+_?[a-zA-Z0-9]*)+$/;
if(pattern.test(elem)){
return true;
}else{
return false;
}
}
//检查是否输入为中文汉字。(真实姓名,必须输入为汉字).
function isChinese(elem){
var pattern=/[^/x00-/xff]/g;
if(pattern.test(elem)){
//包含中文
return false;
}else{
//不包含中文
return true;
}
}
//检验输入关键字是否合法
function isSearch(elem)
{
var /">pattern=/^[^`~!@#$%^&*()+=|///[/]/{/}:;/'/,.<>/? ]{1?]{">}[^`~!@$%^&()+=|///[/]/{/}:;/'/,.<>?]{0,19}$/;
if (!pattern.exec(elem)){
return false;
}else{
return true;
}
}
//表单的值不能为空
function isNull(elem){
//var pattern=/^/s+|/s+$/;
if(elem.replace(/(^/s+|/s$)/g, "")==""){
return false;
}else{
return true;
}
}
//不能超过imax字符
function imax(elem, imax){
if(elem.length>imax){
return false;
}else{
return true;
}
}
//不能少于imix字符
function imix(elem, imix){
if(elem.length<imix){
return false;
}else{
return true;
}
}
//闰年判断
function isleapyear(thisyear){
return(((thisyear%4==0) && (thisyear%100!=0)) || (thisyear%400==0))
}
//检验日期格式
//2004-01-12或者86-1-21 还可以用"/"代替"|"来间隔
function isShortDate(elem){
var pattern=/^(/d{1,4})([-|/])(/d{1,2})([-|/])(/d{1,2})$/;
var temp=elem.match(pattern);
if(temp==null){
return false;
}
var d=new Date(temp[1]+"/"+temp[3]+"/"+temp[5]);
return d.getYear()==temp[1]&&
(d.getMonth()+1)==temp[3]&&
d.getDate()==temp[5];
}
//检验邮政编码
function isPost(elem){
var pattern=/^[0-9]{6}$/;
if(!pattern.test(elem)){
return false;
}else{
if(parseInt(elem)<10000||parseInt(elem)>850000){
return false;
}
return true;
}
}
//电话号码
function isFixTel(elem){
var pattern=/(^[0-9]{3,4}[-|/][0-9]{3,8}$)|(^/([0-9]{3,4}/)[0-9]{3,8}$)/;
if(pattern.test(elem)){
return true;
}else{
//alert("电话号码格式不正确");
return false;
}
}
function isMoveTel(elem){
var pattern=/^0{0,1}13[0-9]{9}$/;
if(pattern.test(elem)){
return true;
}else{
//elert("电话号码不正确");
return false;
}
}
//检验身份证
function isIdCardNum(elem){
var pattern="";
var isSame=false;
var numLength=elem.length;
var temp;
if(numLength==15){
pattern=/^([0-9]{6})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{3})$/;
}else if(numLength==18){
pattern=/^([0-9]{6})([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{3})([0-9]{1})$/;
}else{
return false;
}
temp=elem.match(pattern);
if(temp!=null){
if(numLength==15){
var date15=new Date("19"+temp[2]+"/"+temp[3]+"/"+temp[4]);
isSame=date15.getYear()==temp[2]&&
(date15.getMonth()+1)==temp[3]&&
date15.getDate()==temp[4];
}
if(numLength==18){
var date18=new Date(temp[2]+"/"+temp[3]+"/"+temp[4]);
isSame=date18.getFullYear()==temp[2]&&
(date18.getMonth()+1)==temp[3]&&
date18.getDate()==temp[4];
}
if(!isSame){
return false;
}
}
return true;
}
//是否选择单选按钮
function radioselected(radioBth) {
for(i=0;i<radioBth.length;i++){
if(radioBth[i].checked) return true
}
return false
}
//打开窗口
function openwin(page,w,h){
window.open(page,"","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,width="+w+",left=20,top=20,height="+h);
}
//文件上传
extArray = new Array(".gif", ".jpg", ".png");
function LimitAttach(form, file) {
allowSubmit = false;
if (!file) return;
while (file.indexOf("//") != -1)
file = file.slice(file.indexOf("//") + 1);
ext = file.slice(file.indexOf(".")).toLowerCase();
for (var i = 0; i < extArray.length; i++) {
if (extArray[i] == ext) {
allowSubmit = true;
break;
}
}
if (allowSubmit) form.submit();
else
alert("只能上传以下文件格式: /n"
+ (extArray.join(" ")) + "/n请重新选一个有效的新文件"
+ "/n或者本地转换文件格式后继续上传");
}
// 文本计数器
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit){
field.value = field.value.substring(0, maxlimit);
// 提示用户空间已用完
// alert("不能再输了,只能输入"+maxlimit+"个字符");
// return false;
}else
countfield.value = maxlimit - field.value.length;
}
二.测试程序
<html>
<head>
<title>测试验证脚本check.js</title>
<style type="text/css">
<!--Begin
body, form{font-size:10pt; font-family:Verdana;}
.line{BORDER-TOP-STYLE:none;
BORDER-LEFT-STYLE:none;
BORDER-RIGHT-STYLE:none;
BORDER-BOTTOM-COLOR:#FF0000}
file://End-->
</style>
<script language="javascript" src="check.js"></script>
<script language="javascript">
<!--Begin
function isReady(){
file://search
if(isSearch(validate.search.value)==false||isNull(validate.search.value)==false||imax(validate.search.value, 26)==false){
alert("可能含有非法字符/n"+"或者为空"+"/n或都超过总长26");
validate.search.focus();
return false;
}
file://user
if(isUserId(validate.user.value)==false||imax(validate.user.value, 10)==false||imix(validate.user.value, 4)==false){
alert("由/"_/"(下划线)和/"a-zA-Z0-9/"组成/n"+"并且以/"_/"(下划线)和/"a-zA-Z/"开头/n"+
"字符串长度必须大于4并且小于10个字符长");
validate.user.focus();
return false;
}
file://realname
if((!isChinese(validate.realname.value)==false)||imax(validate.realname.value, 4)==false||imix(validate.realname.value, 2)==false){
alert("请输入中文/n"+"不能少于二个字符多于4个字符");
validate.realname.focus();
return false;
}
file://date
if(isShortDate(validate.date.value)==false){
alert("日期格式无效");
validate.date.focus();
return false;
}
file://post
if(isPost(validate.post.value)==false){
alert("邮政编码无效");
validate.post.focus();
return false;
}
file://tel
if(isFixTel(validate.tel.value)==false&&isMoveTel(validate.tel.value)==false){
alert("电话号码无效");
validate.tel.focus();
return false;
}
file://cardid
if(isIdCardNum(validate.cardid.value)==false){
alert("输入的身份证无效"+"/n请核对后重新输入");
validate.cardid.focus();
return false;
}
file://message
if(isNull(validate.message.value)==false||imax(validate.message.value, 18)==false){
alert("不能发送空信息");
alert(validate.message.value.length);
validate.message.focus();
return false;
}
/*
* else{
* alert(validate.message.value.length);
* }
*/
return true;
}
file://--End -->
</script>
<script language="javascript">
<!--Begin
function checkAll(form){
for(var i=0; i<form.elements.length; i++){
var item=form.elements[i];
if(item.name!="checkall")
item.checked=form.checkall.checked;
}
}
file://End-->
</script>
</head>
<body>
<form name="validate" action="#" method="post" enctype="multipart/form-data" onSubmit="return isReady();">
不含有非法字符,不超过26字符长,不为空<br>
<input type="text" name="search" value="searh">
<br>
由字母和数字,下划线组成.且开头的只能是下划线和字母,字符长大于4且小于10,不为空<br>
<input type="text" name="user" value="_bla_pho">
<br>
输入字符中文汉字:不能多于四个,小于二个<br>
<input type="text" name="realname" value="李凡">
<br>
日期:2004-01-12或者84-1-10 可以用"/"代替"|"来间隔<br>
<input type="text" name="date" value="2004/12/21">
<br>
邮政编码:6位数字,最大值为(西藏拉萨850000),最小值为(呼和浩特010000)<br>
<input type="text" name="post" value="342800">
<br>
电话号码:手机或者小灵通或者庭固定电话。如果要使作区号则必须用"-"或者"/"区分号码<br>
<input type="text" name="tel" value="(0592)5212425">
<br>
身份证<br>
<input type="text" name="cardid" value="666666198512218888">
<br>
<br>
计算文本区还剩余空间:标点。汉字。数字。字母。按键输入下计数减一至到为0<br>
你还可以输入:
<input readonly type="text" class="line" name="counter" value="18" size="3">个字符<br>
<textarea cols="60" rows="4" name="message" wrap="physical"
onKeyDown="textCounter(this.form.message, this.form.counter, 18);"
onKeyUP="textCounter(this.form.message, this.form.counter, 18);"></textarea>
<p>
<input type="checkBox" name="checkall" onClick="checkAll(this.form);">全选<br>
<input type="checkBox" name="item">item2
<input type="checkBox" name="item">item3
<input type="checkBox" name="item">item4
<input type="checkBox" name="item">item5
<input type="checkBox" name="item">item6
<input type="checkBox" name="item">item7
<input type="checkBox" name="item">item8
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<input type="checkBox" name="item">item1
<p>
文件上传格式限制:".gif", ".jpg", ".png"<br>
<input type="file" name="uptofile">
<input type="button" value="上传"
onClick="LimitAttach(this.form, this.form.uptofile.value);">
<p><input type="submit" value="提交">
<input type="reset" value="重置">
</form>
<!-- 为了更直观些 也就不用表格来扰乱视觉.即。不在意布局样式 -->
<!-- 为了方便单个测试。我对各项进行了初始值设置 -->
</body>
</html>