显示标签为“javascript”的博文。显示所有博文
显示标签为“javascript”的博文。显示所有博文

2010年12月22日星期三

在线考试系统

最近做了一个非常简单的在线考试系统:JSP+Servlet+mysql+ajax+存储过程,把一些遇到的问题发到这里记录一下

2009年5月30日星期六

Aptana Plugin For Eclipse 1.2.7 破解

针对最新的aptana_update_024747,可以从 http://www.aptana.com/download/下载并安装。

安装完成后,在eclipse/plugins目录中找到 com.aptana.ide.core_1.2.7.024747.jar

用jad或者相关反编译软件反编译 com.aptana.ide.core.licensing.ClientKey 这个类,我用的是 http://proglife.yo2.cn/articles/eclipse%E4%B8%8B%E7%9A%84%E5%8F%8D%E7%BC%96%E8%AF%91%E6%96%B9%E6%A1%88.html 里边的方案进行反编译的。

新建一个Java类ClientKey,将反编译出来的代码粘贴到这个类中,并修改如下:

package com.aptana.ide.core.licensing;

import java.util.Calendar;
import java.util.TimeZone;

public final class ClientKey
{
  public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--";
  public static final String END_LICENSE_MARKER = "--end-aptana-license--";
  public static final int PRO = 0;
  public static final int TRIAL = 1;
  private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
  public static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING";
  public static final ClientKey EMPTY_KEY = new ClientKey(1, "any@gmail.com", 0L);
  private String email;
  private long expiration;
  private int type;

  public ClientKey(int type, String email, long expiration)
  {
    this.type = type;
    this.email = email;
    this.expiration = expiration;
  }

  public boolean isCloseToExpiring()
  {
    return false;
  }

  public boolean isValid()
  {
    return true;
  }

  public boolean isCloseToMatching()
  {
    return true;
  }

  public boolean isExpired()
  {
   return false;
  }

  public String getEmail()
  {
      return "any@gmail.com";
  }

  public Calendar getExpiration()
  {
    Calendar expirationCal = Calendar.getInstance();
    expirationCal.add(Calendar.YEAR, 50);
    return expirationCal;
  }

  public boolean isTrial()
  {
    return false;
  }

  public boolean isPro()
  {
    return (!(isTrial()));
  }

  public boolean shouldProPluginsRun()
  {
    if (isPro())
    {
      return true;
    }
    return (!(isExpired()));
  }

  public static String trimEncryptedLicense(String encrypted)
  {
    String newEncrypted = encrypted;
    newEncrypted = newEncrypted.trim();
    newEncrypted = newEncrypted.replaceAll("--begin-aptana-license--", "");
    newEncrypted = newEncrypted.replaceAll("--end-aptana-license--", "");
    newEncrypted = newEncrypted.replaceAll("\\s+", "");
    return newEncrypted;
  }
}

注意红色的是修改的部分。

编译该文件,并用生成的class文件替换com.aptana.ide.core_1.2.7.024747.jar中的ClientKey.class文件。(可用winrar打开后直接拖进去覆盖)。

重新启动eclipse即可生效。效果图如下:

1

2008年5月13日星期二

相册程序中的表单检查

<script language="JavaScript" type="text/javascript">
<!--
function checkForm(){
    var filename=document.getElementById("photos").value;
    if(filename==""){
        alert("请先选择要上传的照片后再确定上传!");
        return false;
    }else{
        if(!IsImageName(filename)){
            alert("只允许上传jpg、jpeg、png形式的图片!");
            return false;
        }
    }
    return true;
}
function IsImageName(filename){
    var regex=/^.*(\\|\/)[^\.]+.(jpg|png|jpeg)$/
    var splitted=filename.match(regex);
    if(splitted==null)
        return false;
    return true;
}
//-->
</script>

 

<form action="../servlet/PhotoUpload" method="post" enctype="multipart/form-data" name="form1" id="form1" onsubmit="return checkForm();">
  <table width="67%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>选择文件</td>
      <td><input type="file" name="photos" id="photos" /></td>
    </tr>
    <tr>
      <td valign="top">照片说明</td>
      <td><textarea name="description" id="description" cols="36" rows="3"></textarea></td>
    </tr>
    <tr>
      <td colspan="2"><center>
        <input name="btnSubmit" type="submit" id="btnSubmit" value="上传" />
      </center>
      </td>
      </tr>
  </table>
  </form>

使用javascript显示页面装载过程进度条

<script language="javascript" type="text/javascript">
var percent=0;          //百分比进度,显示在滚动条后面
var element="||";      //滚动条单元竖线
var elements="||";    //滚动条当前竖线
count();                //开始调用循环

function count(){
    percent=percent+10;    //每次百分比加10
    elements =elements + element;  //滚动条当前竖线增加一个滚动条单元竖线
    document.loading.bar.value=elements; //设置窗体loading表单中bar元素的当前值
    document.loading.percentage.value=percent+"%"; //设置窗体loading表单中percentage元素的当前值
    if (percent<99){                    //percent小于99则继续循环
        setTimeout("count()",500);        //每500ms进行一次count()
    }
    else{
         window.location = "http://campus.cslg.cn/";    //percent达到100时跳转
    }
}
</script>

2008年5月2日星期五

JavaScript函数库

/*

-------------- 函数检索 --------------
trim函数:                         trim() lTrim() rTrim()
校验字符串是否为空:                 checkIsNotEmpty(str)
校验字符串是否为整型:               checkIsInteger(str)
校验整型最小值:                    checkIntegerMinValue(str,val)
校验整型最大值:                    checkIntegerMaxValue(str,val)
校验整型是否为非负数:               isNotNegativeInteger(str)
校验字符串是否为浮点型:             checkIsDouble(str)
校验浮点型最小值:                  checkDoubleMinValue(str,val)
校验浮点型最大值:                  checkDoubleMaxValue(str,val)
校验浮点型是否为非负数:             isNotNegativeDouble(str)
校验字符串是否为日期型:             checkIsValidDate(str)
校验两个日期的先后:                checkDateEarlier(strStart,strEnd)
校验字符串是否为email型:           checkEmail(str)

校验字符串是否为中文:               checkIsChinese(str)
计算字符串的长度,一个汉字两个字符:   realLength()
校验字符串是否符合自定义正则表达式:   checkMask(str,pat)
得到文件的后缀名:                   getFilePostfix(oFile) 
-------------- 函数检索 --------------
*/

/**
* added by LxcJie 2004.6.25
* 去除多余空格函数
* trim:去除两边空格 lTrim:去除左空格 rTrim: 去除右空格
* 用法:
*     var str = "  hello ";
*     str = str.trim();
*/
String.prototype.trim = function()
{
    return this.replace(/(^[\\s]*)|([\\s]*$)/g, "");
}
String.prototype.lTrim = function()
{
    return this.replace(/(^[\\s]*)/g, "");
}
String.prototype.rTrim = function()
{
    return this.replace(/([\\s]*$)/g, "");
}
/********************************** Empty **************************************/
/**
*校验字符串是否为空
*返回值:
*如果不为空,定义校验通过,返回true
*如果为空,校验不通过,返回false               参考提示信息:输入域不能为空!
*/
function checkIsNotEmpty(str)
{
    if(str.trim() == "")
        return false;
    else
        return true;
}//~~~
/*--------------------------------- Empty --------------------------------------*/
/********************************** Integer *************************************/
/**
*校验字符串是否为整型
*返回值:
*如果为空,定义校验通过,      返回true
*如果字串全部为数字,校验通过,返回true
*如果校验不通过,              返回false     参考提示信息:输入域必须为数字!
*/
function checkIsInteger(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(/^(\\-?)(\\d+)$/.test(str))
        return true;
    else
        return false;
}//~~~
/**
*校验整型最小值
*str:要校验的串。  val:比较的值
*
*返回值:
*如果为空,定义校验通过,                返回true
*如果满足条件,大于等于给定值,校验通过,返回true
*如果小于给定值,                        返回false              参考提示信息:输入域不能小于给定值!
*/
function checkIntegerMinValue(str,val)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(typeof(val) != "string")
        val = val + "";
    if(checkIsInteger(str) == true)
    {
        if(parseInt(str,10)>=parseInt(val,10))
            return true;
        else
            return false;
    }
    else
        return false;
}//~~~
/**
*校验整型最大值
*str:要校验的串。  val:比较的值
*
*返回值:
*如果为空,定义校验通过,                返回true
*如果满足条件,小于等于给定值,校验通过,返回true
*如果大于给定值,                        返回false       参考提示信息:输入值不能大于给定值!
*/
function checkIntegerMaxValue(str,val)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(typeof(val) != "string")
        val = val + "";
    if(checkIsInteger(str) == true)
    {
        if(parseInt(str,10)<=parseInt(val,10))
            return true;
        else
            return false;
    }
    else
        return false;
}//~~~
/**
*校验整型是否为非负数
*str:要校验的串。
*
*返回值:
*如果为空,定义校验通过,返回true
*如果非负数,            返回true
*如果是负数,            返回false               参考提示信息:输入值不能是负数!
*/
function isNotNegativeInteger(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(checkIsInteger(str) == true)
    {
        if(parseInt(str,10) < 0)
            return false;
        else
            return true;
    }
    else
        return false;
}//~~~
/*--------------------------------- Integer --------------------------------------*/
/********************************** Double ****************************************/
/**
*校验字符串是否为浮点型
*返回值:
*如果为空,定义校验通过,      返回true
*如果字串为浮点型,校验通过,  返回true
*如果校验不通过,              返回false     参考提示信息:输入域不是合法的浮点数!
*/
function checkIsDouble(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    //如果是整数,则校验整数的有效性
    if(str.indexOf(".") == -1)
    {
        if(checkIsInteger(str) == true)
            return true;
        else
            return false;
    }
    else
    {
        if(/^(\\-?)(\\d+)(.{1})(\\d+)$/g.test(str))
            return true;
        else
            return false;
    }
}//~~~
/**
*校验浮点型最小值
*str:要校验的串。  val:比较的值
*
*返回值:
*如果为空,定义校验通过,                返回true
*如果满足条件,大于等于给定值,校验通过,返回true
*如果小于给定值,                        返回false              参考提示信息:输入域不能小于给定值!
*/
function checkDoubleMinValue(str,val)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(typeof(val) != "string")
        val = val + "";
    if(checkIsDouble(str) == true)
    {
        if(parseFloat(str)>=parseFloat(val))
            return true;
        else
            return false;
    }
    else
        return false;
}//~~~
/**
*校验浮点型最大值
*str:要校验的串。  val:比较的值
*
*返回值:
*如果为空,定义校验通过,                返回true
*如果满足条件,小于等于给定值,校验通过,返回true
*如果大于给定值,                        返回false       参考提示信息:输入值不能大于给定值!
*/
function checkDoubleMaxValue(str,val)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(typeof(val) != "string")
        val = val + "";
    if(checkIsDouble(str) == true)
    {
        if(parseFloat(str)<=parseFloat(val))
            return true;
        else
            return false;
    }
    else
        return false;
}//~~~
/**
*校验浮点型是否为非负数
*str:要校验的串。
*
*返回值:
*如果为空,定义校验通过,返回true
*如果非负数,            返回true
*如果是负数,            返回false               参考提示信息:输入值不能是负数!
*/
function isNotNegativeDouble(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if(checkIsDouble(str) == true)
    {
        if(parseFloat(str) < 0)
            return false;
        else
            return true;
    }
    else
        return false;
}//~~~
/*--------------------------------- Double ---------------------------------------*/
/********************************** date ******************************************/
/**
*校验字符串是否为日期型
*返回值:
*如果为空,定义校验通过,           返回true
*如果字串为日期型,校验通过,       返回true
*如果日期不合法,                   返回false    参考提示信息:输入域的时间不合法!(yyyy-MM-dd)
*/
function checkIsValidDate(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    var pattern = /^((\\d{4})|(\\d{2}))-(\\d{1,2})-(\\d{1,2})$/g;
    if(!pattern.test(str))
        return false;
    var arrDate = str.split("-");
    if(parseInt(arrDate[0],10) < 100)
        arrDate[0] = 2000 + parseInt(arrDate[0],10) + "";
    var date =  new Date(arrDate[0],(parseInt(arrDate[1],10) -1)+"",arrDate[2]);
    if(date.getYear() == arrDate[0]
       && date.getMonth() == (parseInt(arrDate[1],10) -1)+""
       && date.getDate() == arrDate[2])
        return true;
    else
        return false;
}//~~~
/**
*校验两个日期的先后
*返回值:
*如果其中有一个日期为空,校验通过,          返回true
*如果起始日期早于等于终止日期,校验通过,   返回true
*如果起始日期晚于终止日期,                 返回false    参考提示信息: 起始日期不能晚于结束日期。
*/
function checkDateEarlier(strStart,strEnd)
{
    if(checkIsValidDate(strStart) == false || checkIsValidDate(strEnd) == false)
        return false;
    //如果有一个输入为空,则通过检验
    if (( strStart == "" ) || ( strEnd == "" ))
        return true;
    var arr1 = strStart.split("-");
    var arr2 = strEnd.split("-");
    var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
    var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
    if(arr1[1].length == 1)
        arr1[1] = "0" + arr1[1];
    if(arr1[2].length == 1)
        arr1[2] = "0" + arr1[2];
    if(arr2[1].length == 1)
        arr2[1] = "0" + arr2[1];
    if(arr2[2].length == 1)
        arr2[2]="0" + arr2[2];
    var d1 = arr1[0] + arr1[1] + arr1[2];
    var d2 = arr2[0] + arr2[1] + arr2[2];
    if(parseInt(d1,10) > parseInt(d2,10))
       return false;
    else
       return true;
}//~~~
/*--------------------------------- date -----------------------------------------*/
/********************************** email *****************************************/
/**
*校验字符串是否为email型
*返回值:
*如果为空,定义校验通过,           返回true
*如果字串为email型,校验通过,      返回true
*如果email不合法,                  返回false    参考提示信息:Email的格式不正確!
*/
function checkEmail(str)
{
    //如果为空,则通过校验
    if(str == "")
        return true;
    if (str.charAt(0) == "." || str.charAt(0) == "@" || str.indexOf(\'@\', 0) == -1
        || str.indexOf(\'.\', 0) == -1 || str.lastIndexOf("@") == str.length-1 || str.lastIndexOf(".") == str.length-1)
        return false;
    else
        return true;
}//~~~
/*--------------------------------- email ----------------------------------------*/
/********************************** chinese ***************************************/
/**
*校验字符串是否为中文
*返回值:
*如果为空,定义校验通过,           返回true
*如果字串为中文,校验通过,         返回true
*如果字串为非中文,             返回false    参考提示信息:必须为中文!
*/
function checkIsChinese(str)
{
    //如果值为空,通过校验
    if (str == "")
        return true;
    var pattern = /^([\\u4E00-\\u9FA5]|[\\uFE30-\\uFFA0])*$/gi;
    if (pattern.test(str))
        return true;
    else
        return false;
}//~~~
/**
* 计算字符串的长度,一个汉字两个字符
*/
String.prototype.realLength = function()
{
  return this.replace(/[^\\x00-\\xff]/g,"**").length;
}
/*--------------------------------- chinese --------------------------------------*/
/********************************** mask ***************************************/
/**
*校验字符串是否符合自定义正则表达式
*str 要校验的字串  pat 自定义的正则表达式
*返回值:
*如果为空,定义校验通过,           返回true
*如果字串符合,校验通过,           返回true
*如果字串不符合,                   返回false    参考提示信息:必须满足***模式
*/
function checkMask(str,pat)
{
    //如果值为空,通过校验
    if (str == "")
        return true;
    var pattern = new RegExp(pat,"gi")
    if (pattern.test(str))
        return true;
    else
        return false;
}//~~~
/*--------------------------------- mask --------------------------------------*/
/********************************** file ***************************************/
/**
* added by LxcJie 2004.6.25
* 得到文件的后缀名
* oFile为file控件对象
*/
function getFilePostfix(oFile)
{
    if(oFile == null)
        return null;
    var pattern = /(.*)\\.(.*)$/gi;
    if(typeof(oFile) == "object")
    {
        if(oFile.value == null || oFile.value == "")
            return null;
        var arr = pattern.exec(oFile.value);
        return RegExp.$2;
    }
    else if(typeof(oFile) == "string")
    {
        var arr = pattern.exec(oFile);
        return RegExp.$2;
    }
    else
        return null;
}//~~~
/*--------------------------------- file --------------------------------------*/

2008年5月1日星期四

通用数据校验JavaScript脚本(适用于IE)

/*
作者:沈健(常熟理工学院计算机系),jimshen@21cn.com
编写本JavaScript脚本的原因在于为表单验证提供一个便于使用的可重用的代码
本代码的版权归作者所有,你可以在任何场合使用本代码,但必须保留该代码的版权声明
在使用过程中遇到的问题或者任何建议可通过电子邮件反馈给作者
*/

//类型模式,用以正则表达式检查表单内容是否满足要求
var ALPHABETIC=0;        //只能使用英文字母
var ALPHANUM=1;            //只能使用英文字母、数字和下划线
var PASSWORD=2;            //能够使用除'、"以及空白字符以外的其他字符
var EMAIL=3;            //符合Email地址格式(用户名@域名/IP地址)
var NOLIMIT=4;            //无限制,可使用任何字符
var NORETURN=5;            //除换行(\n)之外的任何字符
                        //缺省情况为ALPHABETIC

//错误代号
var EMPTY=0;            //表单元素(文本类)输入为空
var TOO_SHORT=1;        //文本长度太短
var TOO_LONG=2;            //文本长度太长
var ILLEGLE=3;            //文本含有非法字符
var WRONG_EMAIL=4;        //电子邮件地址格式错误
var NO_SELECT=5;        //表单元素(单选、复选按钮等)未选择
var TOO_FEW_SELECT=6;    //复选按钮组或者复选列表框选择的数据项数量太少
var TOO_MANY_SELECT=7;    //复选按钮组或者复选列表框选择的数据项数量太多

//产生警告信息
//formName: 表单元素名称
//errorCode: 错误代号
//number: 可选的数量词,表示文本长度或者选项个数需要符合的条件
function warning(formName,errorCode,number){
    var _msg;
    var errorMsg=new Array(8);
    errorMsg[0]="为空,请填写完整!";
    errorMsg[1]="长度不符合要求!长度不能小于";
    errorMsg[2]="长度不符合要求!长度不能大于";
    errorMsg[3]="包含非法的字符!请参照表单填写说明进行修改!";
    errorMsg[4]="电子邮件地址不正确,请填写正确!";
    errorMsg[5]="没有选择,请选择!";
    errorMsg[6]="选择的项数不能少于";
    errorMsg[7]="选择的项数不能多于";
    if(number==null)
        number="";
    _msg=formName+errorMsg[errorCode]+number;
    window.alert(_msg);
    return false;
}

//验证表单元素内容是否符合要求,如果满足返回true,否则返回false
//formObj: 表单元素
//formName: 表单名称,用于显示在错误信息中,应提供用户能够理解的文字
//contentType: 类型模式,用以正则表达式检查,使用预定义的符号,对于文本类以外的元素无意义,默认为只允许英文字母
//minLen: 可选,文本最小长度,对于单选按钮无意义,对于复选按钮组表示最少选择的数量
//maxLen: 可选,文本最大长度,对于单选按钮无意义,对于复选按钮组表示最多选择的数量
//如果不提供minLen和maxLen则不检查长度或个数

//各种检查格式:
// 文本 validate(form1.formname,"文字描述",ALPHANUM,最小长度,最大长度)
// 密码 validate(form1.formname,"文字描述",PASSWORD,最小长度,最大长度)
// 文本-电子邮件 validate(form1.email,"电子邮件",EMAIL)
// 文本域 validate(form1.formname,"文字描述",NOLIMIT,最小长度,最大长度)
// 单选按钮 validate(form1.formname,"文字描述")
// 单个复选按钮 validate(form1.formname,"文字描述")
// 复选按钮组 validate(form1.formname,"文字描述","",最少个数,最大个数)
// 下拉列表 validate(form1.formname,"文字描述")
// 单选列表框 validate(form1.formname,"文字描述")
// 多选列表框 validate(form1.formname,"文字描述","",最少个数,最大个数)

function validate(formObj,formName,contentType,minLen,maxLen){
    var str;
    var regex;
    var formType=formObj.type;
    if(formType==null)
        formType=formObj[0].type;
    var count;
    if(contentType==null)
        contentType=ALPHABETIC;
    switch(contentType){
        case ALPHABETIC:
            regex=/^[A-Za-z]*$/;
            break;
        case ALPHANUM:
            regex=/^[\w]*$/;
            break;
        case PASSWORD:
            regex=/^[^\'\"\s]*$/;
            break;
        case NOLIMIT:
            regex=/^[\u0000-\uffff]*$/;
            break;
        case NORETURN:
            regex=/^.*$/;
            break;
        case EMAIL:
            str=formObj.value;
            if(str==null || str==""){
                return warning(formName,EMPTY);
            }
            if(!checkEmail(str)){
                return warning(formName,WRONG_EMAIL);
            }else
                return true;
            break;
        default:
            regex=/^[\w]*$/;
            break;
    }
    switch(formType){
        case "text":
        case "password":
        case "textarea":
        case "file":
            str=formObj.value;
            if(str==null || str==""){
                return warning(formName,EMPTY);
            }
            if(minLen!=null && minLen!=""){
                if(str.length<minLen){
                    return warning(formName,TOO_SHORT,minLen);
                }
            }
            if(maxLen!=null && maxLen!=""){
                if(str.length>maxLen){
                    return warning(formName,TOO_LONG,maxLen);
                }
            }
            if(!check(str,regex)){
                return warning(formName,ILLEGLE);
            }
            break;
        case "radio":
        case "checkbox":
            count=readButton(formObj);
            if(count==0){
                return warning(formName,NO_SELECT);
            }
            if(minLen!=null && minLen!=""){
                if(count<minLen){
                    return warning(formName,TOO_FEW_SELECT,minLen);
                }
            }
            if(maxLen!=null && maxLen!=""){
                if(count>maxLen){
                    return warning(formName,TOO_MANY_SELECT,maxLen);
                }
            }
            break;
        case "select-one":
            if(readSingle(formObj)<0){
                return warning(formName,NO_SELECT);
            }
            break;
        case "select-multiple":
            count=readMultiple(formObj);
            if(count==0){
                return warning(formName,NO_SELECT);
            }
            if(minLen!=null && minLen!=""){
                if(count<minLen){
                    return warning(formName,TOO_FEW_SELECT,minLen);
                }
            }
            if(maxLen!=null && maxLen!=""){
                if(count>maxLen){
                    return warning(formName,TOO_MANY_SELECT,maxLen);
                }
            }
            break;
    }
    return true;
}

//读取单选按钮、复选按钮、复选按钮组的数据,返回选中的选项的个数
//如果返回为0,表示未选择
function readButton(formObj){
    var count=0;
    var len=formObj.length;
    if(len!=null){
        for(i=0;i<formObj.length;i++){
            if(formObj[i].checked)
                count++;
        }
    }else if(formObj.checked)
        count=1;
    return count;
}

//返回下拉列表、单选列表中被选中数据的编号
//如果返回为-1,表示未选择
function readSingle(formObj){
    return formObj.selectedIndex;
}

//返回多选列表中被选中数据项的个数
//如果返回为0,表示未选择
function readMultiple(formObj){
    var len=formObj.length;
    var count=0;
    for(i=0;i<len;i++){
        if(formObj.options[i].selected){
            count++;
        }
    }
    return count;
}

//检查字符串是否匹配规定的正则表达式
function check(str,regex){
    var splitted=str.match(regex);
    if(splitted==null)
        return false;
    else
        return true;
}

//检查Email地址格式是否正确
function checkEmail(email){
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
        var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
        if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
   }
}

身份证检验Javascript脚本

/*ckBodyId(sId) start
*入口参数:sId:身份证号码字符串。
*返 回 值:false:失败,身份证号码错误。
*          true:成功,身份证号码正确。
*作    用:判断身份证号码是否符合规则。
*/
function ckBodyId(sId)
   {var iSum=0;
    var info="";
    var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
    if(sId.length==15)
      {if(!/^\d{15}$/i.test(sID))
         {alert("非法证号!");
          return false;
         }
       sBirthday=sId.substr(6,2)+"-"+Number(sId.substr(8,2))+"-"+Number(sId.substr(10,2));
      }
    else
      {if(!/^\d{17}(\d|x)$/i.test(sId))
         {alert("非法证号!");
          return false;
         }
       sId=sId.replace(/x$/i,"a");
       sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
       for(var i = 17;i>=0;i --)
         iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11);
       if(iSum%11!=1)
         {alert("非法证号!");
          return false;
         }
      }
    if(aCity[parseInt(sId.substr(0,2))]==null)
      {alert("非法地区!");
       return false;
      }
    var d=new Date(sBirthday.replace(/-/g,"/"))
    if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))
      {alert("非法生日!");
       return false;
      }
    return true
   }
//ckBodyId(sId) end