HTML表单验证函数及一些实用函数

//是否是数字格式的字符串
function isDigit(str)
{
    return /^\d+$/.test(str);
}

//是否是只有26个大小写英文字符的字符串
function isAlpha(str)
{
    return /^[a-zA-Z]+$/.test(str);
}

//是否是可查询的电话号码格式
function isPhoneNum(str){
    return /^[0-9]+$/.test(str)||/^[0-9|]+$/.test(str);
}

//是否只含有大写英文字符
function isUpper(str)
{
    return /^[A-Z]+$/.test(str);
}

//是否只含有小写英文字符
function isLower(str)
{
    return /^[a-z]+$/.test(str);
}

//是否只含有26个大小写英文字符和数字字符的字符串
function isAlnum(str)
{
    return /^[a-zA-Z\d]+$/.test(str);
}

//是否是可用于注册登录名的字符(26个大小写英文字符、数字、下划线、横线)
function isLoginName(str)
{
    return /^[a-zA-Z\d_\-]+$/.test(str);
}

//是否是可用于注册密码的字符(26个大小写英文字符、数字、下划线、横线)
function isPassword(str)
{
    return /^[a-zA-Z\d_\-]+$/.test(str);
}

//是否是整数
function isInt(str)
{
    return /^[+-]?\d+$/.test(str);
}

//是否是浮点数
function isFloat(str)
{
   return /^[+-]?(0\.\d+|0|[1-9]\d*(\.\d+)?)$/.test(str);
}

//是否是邮件地址格式
function isEmail(str)
{
    return /^([a-zA-Z0-9_\-\.])+@([a-zA-Z0-9_-])+\.([a-zA-Z0-9]){2,3}$/.test(str);
    ///^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
}

//是否闰年
function isLeapYear(str)
{
    if (isNaN(str)) return false;
    var year = parseInt(str, 10);
    return ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0))
}

//是否是日期格式(YYYY-MM-DD)
function isDate(str)
{
    if (str.length == 10)
    {
        var dateRegExpStr = "\\d{4}-(((01|03|05|07|08|10|12)-(0[1-9]|[12]\\d|3[01]))|((04|06|09|11)-(0[1-9]|[12]\\d|30))|(02-";
        dateRegExpStr += isLeapYear(str.substring(0, 4)) ? "(0[1-9]|[12]\\d)" : "(0[1-9]|1\\d|2[0-8])";
        dateRegExpStr += "))";

        var dateRegExp = new RegExp(dateRegExpStr);

        return dateRegExp.test(str);
    }
    return false;
}

//是否是日期格式(YYYY-MM)
function isYearMonth(str)
{
    return /^\d{4}-(0[1-9]|1[0-2])$/.test(str);
}

//是否是时间格式(hh:mm:ss)
function isTime(str)
{
    return /^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(str);
}

//是否是日期时间格式(YYYY-MM-DD hh:mm:ss)
function isDateTime(str)
{
    return (str.length == 19) ? (isDate(str.substring(0, 10)) && isTime(str.substring(11, 19))) : false;
}

//获得某年的某个月有多少天 或者说 某年某月的最后一天是多少。
function getDays(year, month)
{
    switch (parseInt(month, 10))
    {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
        case 4: case 6: case 9: case 11: return 30;
        case 2: return isLeapYear(year) ? 29 : 28;
    }
}

//获取当前时间,返回格式:yyyy-mm-dd
function getToday(){
var date = new Date();
var month = date.getMonth()+1<10 ? "0"+(date.getMonth()+1) : (date.getMonth()+1);
var day = date.getDate()<10 ? "0"+(date.getDate()) : (date.getDate());
return date.getYear()+"-"+month+"-"+day;
}

//计算两个日期相差天数(sDate1 - sDate2),sDate1和sDate2是"yyyy-mm-dd"格式
function dateDiff(sDate1, sDate2)
{
    var aDate, oDate1, oDate2, iDays
    aDate = sDate1.split("-")
    oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])  //转换为12-18-2002格式
    aDate = sDate2.split("-")
    oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
    iDays = parseInt((oDate1 - oDate2) / 1000 / 60 / 60 /24)  //把相差的毫秒数转换为天数
    return iDays
}

//是否是IP地址格式(用点"."分割的四组数字中,第一组数字范围1-223,其他三组数字范围0-255)
function isIP(str)
{
    return /^(0?0?[1-9]|0?[1-9]\d|1\d\d|2[01]\d|22[0-3])(\.([01]?\d?\d|2[0-4]\d|25[0-5])){3}$/.test(str);
}

//对于IP地址中的每组数字如果不足3位,则前面补零。例如:"192.168.1.22",结果"192.168.001.022"
function getFullIP(ip)
{
    var nums = ip.split(".");
    var fullIP = "";
    fullIP += repeatString("0", 3 - nums[0].length) + nums[0];
    for (var i = 1; i < nums.length; i++)
        fullIP += "." + repeatString("0", 3 - nums[i].length) + nums[i];
    return fullIP;
}

//验证是否是MAC地址(用英文冒号":"分割的6组两位字符,其中字符只能是英文字符或数字,例如:00:03:0D:61:62:7C)
function isMAC(mac)
{
    return /^[\dA-Za-z]{2}(\:[\dA-Za-z]{2}){5}$/.test(mac);
}

/*
是否是英文逗号","分隔的数字格式的号码串。
具体判断规则:
1、每个号码必须是数字格式;
2、号码之间可以用英文逗号、空格、换行符或其组合分隔。
*/
function isPhoneNumbers(str)
{
    return /^[\s,]*\d+([\s,]+\d+)*[\s,]*$/.test(str);
}

/*
获得repeat个字符串str的连接结果
@param str 要重复的字符串
@param repeat 重复的次数
*/
function repeatString(str, repeat)
{
    var repeatStr = "";
    for (var i = 0; i < repeat; i++)
        repeatStr += str;
    return repeatStr;
}

//是否包含非法字符,针对文件名。(\、/、|、"、?、*、:、<、>)
function containInvalidChar(str)
{
    return /[\\\/\|"\?\*:<>]/.test(str);
}


//获得字符串对象的字节数
function bytes(str)
{
    return str.replace(/[^\x00-\xff]/g,"**").length;
}

//去除字符串两边的空格
String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//数组中是否包含了指定元素
Array.prototype.contains = function(obj)
{
    for (var i = 0; i < this.length; i++)
        if (this[i] === obj) return true;

    return false;
}

//向数组末尾添加一个元素
Array.prototype.add = function(obj)
{
    this[this.length] = obj;
}
/*
设置选择框按钮的选中状态
@param checkBox 选择框按钮的名称
@param checked true选中所有,false取消所有。
       此参数可省略,省略时,每一次调用该方法都会循环的选中、取消、选中...
*/
function setCheckedState(checkBox, checked)
{
    if (!checkBox) return;
    var checked;
    if (typeof(flag) != "undefined")
        checked = flag;
    if (checkBox.length)
    {
        checked = !checkBox[0].checked;
        for (var i = 0; i < checkBox.length; i++)
            checkBox[i].checked = checked;
    }
    else
        checkBox.checked = !checkBox.checked;
}

//获得选择框按钮组被选中的个数
function checkedSize(checkBox)
{
    var size = 0;
    if (typeof(checkBox) != undefined)
    {
        if (checkBox.length)
        {
            for (var i = 0; i < checkBox.length; i++)
                if (checkBox[i].checked) size++;
        }
        else if (checkBox.checked) size++;
    }
    return size;
}

/*
清除单选、多选按钮组的选中状态
@param field:单选或多选按钮组的名称
*/
function clearChecked(field)
{
    if (field)
    {
        if (!field.length)
            field.checked = false;
        else
            for (var i = 0; i < field.length; i++)
                field[i].checked = false;
    }
}

/*
清除指定表单的字段值。
如果表单字段为 文本框 ,则清空
如果表单字段为 下拉选择框 ,则选择第一项
如果表单字段为单选或多选按钮,则全清选中状态
*/
function clearForm(theForm)
{
    var len = theForm.elements.length;
    for (var i = 0; i < len; i++)
    {
        with (theForm.elements[i])
        {
            switch (tagName)
            {
                case "INPUT":
                    var inputType = getAttribute("type");
                    if (inputType == "text")
                        value = "";
                    else if (inputType == "checkbox" || inputType == "radio")
                        clearChecked(theForm.elements[i]);
                    break;
                case "SELECT":
                    selectedIndex = 0;
                    break;
            }
        }
    }
}

/*
从源列表框向目标列表框复制元素
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
*/
function copySelect(fromSelect, toSelect)
{
    var fOpts = fromSelect.options;
    var tOpts = toSelect.options;

    for (var i = 0; i < fOpts.length; i++)
    {
        if (fOpts[i].selected)
        {
            for (var j = 0; j < tOpts.length; j++)
            {
                var repeat = false;
                if (tOpts[j].value == fOpts[i].value)
                {
                    repeat = true;
                    break;
                }
            }

            if (!repeat) tOpts.add(new Option(fOpts[i].text, fOpts[i].value));
        }
    }
}

/*
移除列表框中的元素
@param select 列表框对象
*/
function removeSelect(select)
{
    for (var i = select.options.length - 1; i >= 0; i--)
        if (select.options[i].selected)
            select.remove(i);
}

/*
移动源列表框中选中的项目到目标列表框中,并按照指定排序函数对列表框中的值进行排序。
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
@param compare 比较大小函数,用于排序目的。
*/
function moveSelect(fromSelect, toSelect, compare)
{
    outer:
    for (var i = fromSelect.length - 1; i >= 0; i--)
    {
        if (fromSelect[i].selected)
        {
            var opt = new Option(fromSelect[i].text, fromSelect[i].value);
            fromSelect.remove(i);
            if (toSelect.length > 0)
            {
                for (var j = 0; j < toSelect.length; j++)
                {
                    if (compare(opt.value, toSelect[j].value) < 0)
                    {
                        toSelect.add(opt, j);
                        continue outer;
                    }
                }
            }
            toSelect.add(opt);
        }
    }
}

/*
移动源列表框中所有的项目到目标列表框中,并按照指定排序函数对列表框中的值进行排序。
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
@param compare 比较大小函数,用于排序目的。
*/
function moveAllSelect(fromSelect, toSelect, compare)
{
    outer:
    for (var i = fromSelect.length - 1; i >= 0; i--)
    {
        var opt = new Option(fromSelect[i].text, fromSelect[i].value);
        fromSelect.remove(i);
        if (toSelect.length > 0)
        {
            for (var j = 0; j < toSelect.length; j++)
            {
                if (compare(opt.value, toSelect[j].value) < 0)
                {
                    toSelect.add(opt, j);
                    continue outer;
                }
            }
        }
        toSelect.add(opt);
    }
}

/* 以整数比较两个参数的大小,若 num1 > num2 则返回大于0的值,若 num1 == num2 则返回0,否则返回小于0的值 */
function compareInt(num1, num2)
{
    return parseInt(num1) - parseInt(num2);
}

/* 以浮点数比较两个参数的大小,若 num1 > num2 则返回大于0的值,若 num1 == num2 则返回0,否则返回小于0的值 */
function compareFloat(num1, num2)
{
    return parseFloat(num1) - parseFloat(num2);
}

/* 以字符串比较两个参数的大小,若 num1 > num2 则返回1,若 num1 == num2 则返回0,否则返回-1的值  */
/* str1,str2不能同时为负数 */
function compareString(str1, str2)
{
    var s1 = new String(str1);
    var s2 = new String(str2);
    
    if(s1<0&&s2<0){
     if (s1 > s2) return -1;
     else if (s1 == s2) return 0;
     else return 1;
    }
    
    if (s1 > s2) return 1;
    else if (s1 == s2) return 0;
    else return -1;
}


/* 根据系统定义的操作符直接比较两个参数的大小,若 num1 > num2 则返回1,若 num1 == num2 则返回0,否则返回-1的值 */
function compare(a1, a2)
{
    if (a1 > a2) return 1;
    else if (a1 == a2) return 0;
    else return -1;
}

/*
拷贝数据,支持对数组、对象和基本类型的数据拷贝。
*/
function clone(obj)
{
    if(typeof(obj) != "object") return obj;
    var obj2;
    if(obj instanceof Array)
    {
        obj2 = [];
        for (var i = 0; i < obj.length; i++)
        {
            obj2[i] = typeof(obj[i]) == "object" ? clone(obj[i]) : obj[i];
        }
    }
    else
    {
        obj2 = {};
        for(i in obj)
        {
            obj2[i] = typeof(obj[i])=="object" ? clone(obj[i]) : obj[i];
        }
    }
    return obj2;
}

/*
选中目标下拉列表框种的一个元素
@param select 目标下拉列表框
@param value 要选中的值
*/
function selectItem(select, value)
{
    var opts = select.options;
    for (var i = 0; i < opts.length; i++)
    {
        if (opts[i].value == value)
        {
            opts[i].selected = true;
            break;
        }
    }
}

/*
选中下拉列表框的所有项
@param select 下拉列表框
*/
function selectAll(select)
{
    for (var i = 0; i < select.options.length; i++)
        select.options[i].selected = true;
}

/*
获得某年某月的所有周并写入目标下拉列表中。
规则:从当月的第一天算起,每7天为一周,最后一天可能不为7天,也算作一周。
目标下拉列表中的元素为(举例):
<option value=""></option>
<option value="1">第1周</option>
<option value="2">第2周</option>
......
@param weekSelect 目标下拉列表框
@param year 年
@param month 月
*/
function setWeekSelect(weekSelect, year, month)
{
    var options = weekSelect.options;
    options.length = (options.length > 0 && options[0].value == "") ? 1 : 0;

    if (isNaN(parseInt(year, 10)) || isNaN(parseInt(month, 10)))
        return;

    var weeks = (!isLeapYear(year) && parseInt(month) == 2) ? 4 : 5;
    for (var i = 1; i <= weeks; i++)
        options.add(new Option("第" + i + "周", i));
}

//该方法将会寻找具有id和parent的属性的文本框,并对每种相同名字的所有文本框从最低层向上累加。
function initAddUp()
{
    this.hasChild = function(texts, text)
    {
        for (var i = 0; i < texts.length; i++)
            if (texts[i].parent == text.id)
                return true;

        return false;
    }

    this.hasSameParent = function(texts, text)
    {
        for (var i = 0; i < texts.length; i++)
            if (texts[i].parent == text.parent)
                return true;

        return false;
    }

    this.getLastChilds = function(texts)
    {
        var lastChilds = new Array();
        for (var i = 0; i < texts.length; i++)
            if (!hasChild(texts, texts[i]) && !hasSameParent(lastChilds, texts[i]))
                lastChilds.add(texts[i]);

        return lastChilds;
    }

    var allText = document.getElementsByTagName("INPUT");
    var textNames = new Array();
    for (var i = 0; i < allText.length; i++)
    {
        if (allText[i].id && allText[i].parent && !textNames.contains(allText[i].name))
        {
            textNames.add(allText[i].name);
        }
    }

    for (var i = 0; i < textNames.length; i++)
    {
        var texts = document.getElementsByName(textNames[i]);
        var lastTexts = getLastChilds(texts);
        for (var j = 0; j < lastTexts.length; j++)
            addUp(lastTexts[j]);
    }
}

/*
对文本框输入的数据累加到其所属的高层的文本框中。
要求该文本框必须有name、id和parent属性。
@param text 要累加的文本框
*/
function addUp(text)
{
    this.text = text;

    this.texts = document.getElementsByName(text.name);

    this.getParentText = function(text)
    {
        for (var i = 0; i < texts.length; i++)
            if (texts[i].id == text.parent)
                return texts[i];
    }

    this.add = function(text)
    {
        if (text.value.length == 0)
        {
            return;
        }
        if(!isFloat(text.value)){
            return;
        }
        var parentText = getParentText(text);
        if (parentText === undefined)
        {
            text.value = Math.round(text.value * 100) / 100;
            return;
        }

        var sum = 0;
        for (var i = 0; i < texts.length; i++)
            if (texts[i].parent == text.parent && isFloat(texts[i].value))
                sum += parseFloat(texts[i].value);

        text.value = Math.round(text.value * 100) / 100;
        parentText.value = Math.round(sum * 100) / 100;

        add(parentText);
    }

    add(text);
}

/*
根据 url 打开一个规定宽带和高度的新弹出窗口,新窗口将在屏幕中间稍微靠上显示,url中的参数可以从表单中获得。
@param url 打开新窗口的路径
@param name 窗口名称
@param width 窗口宽度
@param height 窗口高度
@param oForm 要获取参数的表单,可省略。
@return 返回打开窗口的对象
*/
function openWin(url, name, width, height, oForm)
{
    if (oForm != undefined)
    {
        var params = "";
        var len = oForm.elements.length;
        for (var i = 0; i < len; i++)
        {
            with (oForm.elements[i])
            {
                switch (tagName)
                {
                    case "SELECT":
                        params += "&" + getAttribute("name") + "=" + encodeString(value);
                        break;
                    case "INPUT" :
                        var type = getAttribute("type");
                        if (type == "text" || type == "hidden")
                            params += "&" + getAttribute("name") + "=" + encodeString(value);
                        break;
                }
            }
        }
        if (url.indexOf("?") == -1)
            url += "?" + params.substr(1);
        else url += params;
    }
    var left = (window.screen.width - width) / 2;
    var top = (window.screen.height - height) / 2;
    window.open(url, name, "width=" + width + ",height=" + height + ",top=" + top + ",left=" + left + ",resizable=yes,scrollbars=yes");
}

//对url中的特殊英文字符进行编码
function encodeString(str)
{
    var s = "";
    for (var i = 0; i < str.length; i++)
    {
        s += str.charCodeAt(i) <= 255 ? encodeURIComponent(str.charAt(i)) : str.charAt(i);
    }
    return s;
}

/*
写入HTML编码的英文字符空格。
@param num 写入的空格数。可省略,省略时,写入的空格长度与文本框的默认长度(18)相等。
*/
function writeSpaces(num)
{
    var space = "&nbsp;";
    var repeats = num == undefined ? 18 : num;
    document.write(repeatString(space, repeats));
}

/*
根据传入的字符串在其后面写入HTML编码的英文空格以使字符串和空格的长度大致等于文本框的默认长度。
@param str 字符串,可省略,省略时写入文本框默认长度的空格。
*/
function fillSpaces(str)
{
    var totalLen = 18;
    var strLen = str == undefined ? 0 : byteSize(str);
    var spaceLen = totalLen - strLen;
    var space = "&nbsp;";
    document.write(str + repeatString(space, spaceLen));
}

/*
根据传入的字符串判断其长度是否为零,如果否,则显示字符串内容。
@param msg 提示的信息。
*/
function showMessage(msg)
{
    if(msg.length > 0)
    {
   alert(msg);
    }
}

function showMessage2(msg)
{
    if(msg.length > 0)
    {
        //document.createElement();
        alert(msg);
    }
}


/*
鼠标在表格行滑过颜色变化
*/

var _clickedRow = null;
var _defaultColor = '#E3E3E3';
var _changedColor = '#C0C0C0';

function clickRow(row)
{
    if (!_clickedRow)
    {
        _clickedRow = row;
        row.style.backgroundColor = _changedColor;
    }
    else if (row != _clickedRow)
    {
        _clickedRow.style.backgroundColor = _defaultColor;
        row.style.backgroundColor = _changedColor;
        _clickedRow = row;
    }
}

function overRow(row)
{
    if (row != _clickedRow)
    {
        row.style.backgroundColor = _changedColor;
    }
}

function outRow(row)
{
    if (row != _clickedRow)
    {
        row.style.backgroundColor = _defaultColor;
    }

你可能感兴趣的:(日期校验,数据类型校验,IP和MAC地址校验,电子邮件和电话号码校验,用户名和密码校验)