//是否是数字格式的字符串
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 = " ";
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 = " ";
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;
}
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 = " ";
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 = " ";
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;
}
相关推荐
总的来说,"JS通用表单验证函数1"是一个实用的工具,能够帮助开发者构建健壮的前端表单验证机制,提升网站或应用程序的质量。结合提供的文件,开发者可以学习到更多关于JavaScript表单验证的技巧和最佳实践,进一步...
本篇将详细介绍JavaScript表单验证函数的一些关键知识点。 一、基本验证概念 1. 验证类型:表单验证通常包括对字符串长度、数字范围、邮箱格式、电话号码、日期等的验证。 2. 验证时机:验证可以在用户输入时实时...
这篇博客"常用表单验证脚本函数"主要探讨了JavaScript中用于表单验证的一些关键函数和方法。通过学习这些函数,开发者可以创建更加健壮和用户友好的表单。 1. **required属性**:这是HTML5引入的一个特性,可以在...
.net2005完美JavaScript通用表单验证函数,只需要包含此文件就可以实现验证功能.
表单验证 正则 函数封装 不会用的和本人联系
【JS通用表单验证函数】是前端开发中用于确保用户输入数据有效性和合规性的一种常见技术。在网页表单提交前,使用JavaScript进行验证可以提高用户体验,减少无效数据提交到服务器,同时减轻后端处理压力。 这个特定...
"简单实用表单验证实例"是一个专注于这个主题的资源,提供了一种直观且易于使用的解决方案。在这个实例中,不仅包含了基本的验证功能,还融合了视觉样式,提升用户体验。 表单验证主要涉及到以下几个方面: 1. **...
在这个"很美观及实用的html5+css3表单验证效果"项目中,我们可以看到如何利用这两种技术来增强表单的用户体验,特别是对于表单验证这一关键功能。 首先,让我们关注HTML5。HTML5引入了新的表单元素和属性,如`...
常用表单js函数,一些很常用的函数,方便验证
本文将深入探讨"javascript表单验证方式一",介绍如何利用JavaScript进行表单验证,确保用户输入的数据符合预设规则,提高用户体验,同时也减轻了服务器端的压力。 首先,表单验证的基本目标是检查用户在HTML表单中...
超全JS表单验证函数,包含常用的文本框,下拉列表,单选按钮,复选框,日期时间,邮箱,金额及特殊字符等校验,是javaWeb项目开发的重要技术资源
1、验证插件支持正则表达式验证,函数验证,ajax异步验证,支持对比验证,并支持对表单的自定义属性或指定属性进行验证,应该足矣满足常用软件及网站开发需求。(可根据自己需求,手动添加验证方式) 2、插件支持...
以下是一些关键的jQuery表单验证知识点: 1. **选择器与事件绑定**:jQuery的选择器语法简洁,可以轻松选取DOM元素。在表单验证中,我们可以使用`$('input[type=text]')`选取所有文本输入框,然后用`.on('keyup', ...
本文将深入探讨表单验证的常见方法,并结合“formValidate.jsp”文件及“常用验证总结.txt”的内容进行详细总结。 一、表单验证类型 1. 客户端验证:发生在用户浏览器端,通过JavaScript、jQuery等前端技术实现。...
5. **表单验证函数**:一个典型的验证函数会检查每个字段的值,如果不符合要求,则显示错误消息。例如,可以创建一个`validateForm()`函数,对每个输入字段进行遍历和检查。 6. **自定义错误消息**:通过修改元素的...
在JavaScript(JS)前端开发中,表单验证是不可或缺的一部分,它确保用户输入的数据符合预设的规则,从而提高用户体验并减少服务器端的处理压力。本文将深入探讨JS前端表单验证的相关知识点。 首先,我们要了解表单...
根据给定的文件信息,我们可以总结出一系列与JavaScript表单验证相关的知识点,这些知识点涵盖了从基本的输入检查到复杂的格式验证。以下是对这些知识点的详细解释: ### 1. 表单验证概述 表单验证是Web开发中的一...
在Web开发中,表单验证是一项至关重要的任务,它确保用户输入的数据符合应用程序的要求和预期。JQuery,一个流行的JavaScript库,提供了强大的功能来简化这一过程。本篇将深入探讨如何利用JQuery实现表单验证,特别...
在Web开发中,表单验证是必不可少的一部分,它确保用户输入的数据符合预设的规则,从而维护数据的完整性和安全性。本主题将深入探讨“表单验证自定义验证规则和错误信息”,帮助开发者构建更加灵活、用户体验良好的...
在IT领域,尤其是在Web开发中,表单验证是不可或缺的一部分,它确保用户输入的数据符合预设的规则,从而保证数据的准确性和系统的安全性。这里我们关注的是“JQ表单验证”,这是一种基于jQuery库的轻量级解决方案,...