2008-11-07 02:51
/**
* 得到中英文字符长
* @param {} str
* @return {}
*/
function LengthB(str){
var p1 = new RegExp('%u..', 'g')
var p2 = new RegExp('%.', 'g')
return escape(str).replace(p1, '').replace(p2, '').length
}
/**
* 过滤所有空格字符
* @param {Object} str
*/
function jsTrim(str){
str += "";
while ((str.charAt(0) == ' ') || (str.charAt(0) == '???') || (escape(str.charAt(0)) == '%u3000'))
str = str.substring(1, str.length);
while ((str.charAt(str.length - 1) == ' ') || (str.charAt(str.length - 1) == '???') || (escape(str.charAt(str.length - 1)) == '%u3000'))
str = str.substring(0, str.length - 1);
return str;
}
/**
* 过滤中间字符串和多个空格
* @param {Object} inputString
*/
function trim(inputString){
if (typeof inputString != "string") {
return inputString;
}
var retValue = inputString;
var ch = retValue.substring(0, 1);
while (ch == " ") {
//检查字符串开始部分的空格
retValue = retValue.substring(1, retValue.length);
ch = retValue.substring(0, 1);
}
ch = retValue.substring(retValue.length - 1, retValue.length);
while (ch == " ") {
//检查字符串结束部分的空格
retValue = retValue.substring(0, retValue.length - 1);
ch = retValue.substring(retValue.length - 1, retValue.length);
}
while (retValue.indexOf(" ") != -1) {
//将文字中间多个相连的空格变为一个空格
retValue = retValue.substring(0, retValue.indexOf(" ")) + retValue.substring(retValue.indexOf(" ") + 1, retValue.length);
}
return retValue;
}
/**
* 过滤字符串,指定过滤内容,如果内容为空,则默认过滤 '~!@#$%^&*()-+."
* @param {Object} str
* @param {Object} filterStr
*
* @return 包含过滤内容,返回True,否则返回false;
*/
function FilterStr(str, filterStr){
filterStr = filterStr == "" ? "'~!@#$%^&*()-+.\"" : filterStr
var ch;
var i;
var temp;
var error = false;//当包含非法字符时,返回True
for (i = 0; i <= (filterStr.length - 1); i++) {
ch = filterStr.charAt(i);
temp = str.indexOf(ch);
if (temp != -1) {
error = true;
break;
}
}
return error;
}
/**
* 过滤指定内容字符串
* @param {Object} str 检查字符串
* @param {Object} filterStr 过滤字符串,内容为空,则默认过滤 '~!@#$%^&*()-+."
* @param {Object} alertStr 弹出对话内容
* @param {Object} idStr 出错返回出错字段ID
*/
function ISFilterStr(str, filterStr, alertStr, idStr){
alertStr = "对不起,您输入的 " + alertStr + " 不允包含 " + filterStr + " 非法字符";
if (FilterStr(str, filterStr))
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查是否为网址
* @param {} str_url
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>不是</b>网址返回false;
*/
function IsURL(str_url, alertStr, idStr){// 验证url
alertStr = alertStr + " 格式不正确!";
var strRegex = "^((https|http|ftp|rtsp|mms)?://)" +
"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" // ftp的user@
+
"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
+
"|" // 允许IP和DOMAIN(域名)
+
"([0-9a-z_!~*'()-]+\.)*" // 域名- www.
+
"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
+
"[a-z]{2,6})" // first level domain- .com or .museum
+
"(:[0-9]{1,4})?" // 端口- :80
+
"((/?)|" // a slash isn't required if there is no file name
+
"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var re = new RegExp(strRegex);
if (!re.test(str_url))
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查是否为电子邮件
* @param {} str
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>不是</b>电子邮件返回false;
*/
function IsEmail(str, alertStr, idStr){
alertStr = alertStr + " 格式不正确!";
var re = /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
if (!re.test(str))
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查是否为数字
* @param {} str
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>不是</b>数字返回false;
*/
function IsNum(str, alertStr, idStr){
alertStr = alertStr + " 应该由数字组成!";
var re = /^[\d]+$/
if (!re.test(str))
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查数值是否在给定范围以内<br>
* @param {} str_num
* @param {} moreLen 应该大于或者等于的数值
* @param {} lessLen 应该小于或者等于的数值
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>小于最小数值或者大于最大数值</b>数字返回false;
*/
function IsRangeNum(str_num, moreLen, lessLen, alertStr, idStr){
IsNum(str_num, alertStr, idStr);
if (moreLen != "") {
alertStr = alertStr + " 数值不能小于 " + moreLen;
if (str_num < moreLen)
this.AlertAndRFalse(alertStr, idStr);
}
if (lessLen != "") {
alertStr = alertStr + " 数值不能大于 " + lessLen;
if (str_num > lessLen)
this.AlertAndRFalse(alertStr, idStr);
}
if (moreLen == "" && lessLen == "")
this.AlertAndRFalse("没有定义最大最小长度!", idStr);
}
/**
* 检查是否为合格字符串(不区分大小写)<br>
* 长度在6至20位,并且是由a-z0-9_组成的字符串
* @param {} str 检查的字符串
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>不是</b>"长度在6至20位且由a-z0-9_"组成返回false;
*/
function IsLicit(str, alertStr, idStr){
alertStr = "对不起," + alertStr + " 不能为空并且只能由 0到9 a到z 下划线 的6到20位组成! ";
var re = /^[_0-9a-zA-Z]{6,20}$/
if (!re.test(str))
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查二个字符串是否相等
* @param {} str1 第一个字符串
* @param {} str2 第二个字符串
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} 字符串不相等返回false;
*/
function IsStrEquals(str1, str2, alertStr, idStr){
alertStr = "二次 " + alertStr + " 不一致!";
if (str1 != str2)
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 检查字符串是否在给定长度范围以内(中文字符以2个字节计算)<br>
*
* @param {} str 检查的字符
* @param {} moreLen 应该大于或者等于的长度
* @param {} lessLen 应该小于或者等于的长度
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>小于最小长度或者大于最大长度</b>数字返回false;
*/
function IsRange(str, moreLen, lessLen, alertStr, idStr){
var strLen = LengthB(str);
if (moreLen != "") {
alertStr = alertStr + " 应该大于或等于 " + moreLen + " 个字节长度!";
if (strLen < moreLen)
this.AlertAndRFalse(alertStr, idStr);
}
if (lessLen != "") {
alertStr = alertStr + " 应该小于或等于 " + lessLen + " 个字节长度!";
if (strLen > lessLen)
this.AlertAndRFalse(alertStr, idStr);
}
if (moreLen == "" && lessLen == "")
this.AlertAndRFalse("没有定义最大最小长度!", idStr);
}
/**
* 检查字符串是否小于给定长度范围(中文字符以2个字节计算)<br>
* @param {} str 字符串
* @param {} lessLen 小于或等于长度
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>大于给定长度</b>数字返回false;
*/
function IsLess(str, lessLen, alertStr, idStr){
IsRange(str, "", lessLen, alertStr, idStr);
}
/**
* 检查字符不为空
* @param {} str
* @param {} alertStr 弹出字段内容
* @param {} idStr 光标定位的字段ID<b>只能接收ID</b>
* @return {Boolean} <b>字符为空</b>返回false;
*/
function IsEmpty(str, alertStr, idStr){
alertStr = alertStr + " 不能为空!";
if (str == "")
this.AlertAndRFalse(alertStr, idStr);
}
/**
* 弹出警示框,并定位到出错字段上
* @param {} alertStr 弹出警告框内容
* @param {} idStr 返回字段焦点
* @return {Boolean} 返回false
*/
function AlertAndRFalse(alertStr, idStr){
alert(alertStr);
document.getElementById(idStr).focus();
throw "valueErr";
}
// JavaScript Document
调用示例
function checkForm() {
try {
var title = trim(document.getElementById('title')); //文章标题
IsEmpty(title,"文章标题","title");//不可为空
IsLess(title,100,"文章标题","title");//标题应少于100个字符长
ISFilterStr(title, "~`!@#$%^&*()-=_+[]{}|\\;':\",./<>?", "文章标题","title")//标题不允许包含这些非法字符
} catch(err) {
if(err == "valueErr")
return false;
}
}
分享到:
- 2009-11-27 21:41
- 浏览 1200
- 评论(0)
- 论坛回复 / 浏览 (0 / 3117)
- 查看更多
相关推荐
内容概要:本文详细介绍了基于Atmega128AU微控制器的高精度温度采集与PID加热控制系统的设计与实现。系统采用两片AD7732进行24位高精度数据采集,配合MAX31856实现热电偶温度测量,并通过PID算法对加热过程进行精确控制。文中详细描述了各个组件的配置方法、代码实现以及抗干扰措施,确保系统的高精度和稳定性。此外,系统支持Modbus RTU通信协议,便于远程监控和调试。 适合人群:具有一定嵌入式开发经验的研发人员和技术爱好者。 使用场景及目标:适用于需要高精度温度控制的工业应用场景,如实验室、热处理炉等。目标是实现稳定的温度采集和精准的加热控制,同时具备良好的抗干扰性能。 其他说明:文中提供了详细的代码片段和配置指南,帮助读者理解和复现系统设计。强调了硬件选择、软件实现和抗干扰设计的重要性,确保系统能够在复杂环境中稳定运行。
蓝桥杯c ++资源。蓝桥杯C++程序设计本科B组题目。
内容概要:本文详细介绍了无速度矢量控制(Sensorless Vector Control)和飞车启动(Flying Start)的技术实现及其优化方法,特别针对TI公司的DSP28X系列处理器进行了深入探讨。文中首先讲解了飞车启动的关键技术,如滑模观测器的应用,通过符号函数和三目运算符实现高效控制,解决了电机自由旋转时的传统难题。接着讨论了全速域追踪的实现,利用自适应滤波器进行角度补偿,确保低速高精度和高速稳定性的平衡。此外,文章还展示了如何将算法封装成Simulink可调用的S函数模块,便于调试和移植。最后,针对代码移植过程中常见的问题提供了具体的解决方案,如IQmath库的使用技巧、PWM中断优化以及硬件依赖的抽象化处理。 适合人群:具备嵌入式系统开发经验,尤其是熟悉DSP和电机控制领域的工程师和技术人员。 使用场景及目标:①适用于需要高性能电机控制系统的工业应用场景,如风机、洗衣机、电动工具等;②帮助工程师理解和掌握无速度矢量控制和飞车启动的核心技术和优化方法,提高系统的可靠性和性能。 其他说明:本文不仅提供了详细的代码实现,还分享了许多实用的经验和技巧,对于希望深入了解电机控制算法并应用于实际项目的开发者非常有帮助。
中兴光猫G7610V2-V3.0.0P1N12固件
内容概要:本文详细介绍了如何使用 .NET Core 和 Vue.js 开发一个完整的外卖订餐系统。该系统分为后台管理系统和前台客户系统,采用的技术栈包括 .NET Core、EF Core Code First、Vue.js 和 Element UI。后台部分重点讲解了如何使用 .NET Core 创建 Web API 并通过 EF Core Code First 操作数据库,涵盖数据库设计、API 设计、权限管理等内容。前台部分则展示了如何利用 Vue.js 和 Element UI 构建用户友好的交互界面,包括动态表单、图片上传等功能。此外,文章还讨论了一些常见的开发陷阱和技术难点,如数据库查询优化、订单状态机、JWT 认证等。 适合人群:具备一定编程基础,特别是对 .NET Core 和 Vue.js 有一定了解的研发人员。 使用场景及目标:适用于希望深入理解前后端分离架构、企业级应用开发流程的学习者。通过实际项目的开发,掌握 .NET Core 和 Vue.js 的核心技术,提升解决实际问题的能力。 其他说明:文中提供了详细的代码示例和最佳实践建议,帮助开发者更好地理解和应用所学知识。同时,项目结构清晰,有助于初学者逐步掌握复杂的开发技巧。
内容概要:本文介绍了MATLAB实现DBN-RBF深度置信网络结合RBF神经网络多输入单输出回归预测的详细项目实例。项目旨在通过深度置信网络(DBN)和径向基函数神经网络(RBF)的结合,设计出一种高效的回归预测模型,以应对高维数据和非线性关系的挑战。DBN用于无监督特征提取,RBF用于快速回归,两者结合显著提升了预测精度和模型泛化能力。文中详细描述了项目的背景、目标、挑战、解决方案、模型架构、代码实现、GUI设计、性能评估及未来改进方向。 适合人群:具备一定编程基础,对机器学习和深度学习有一定了解的研发人员,尤其是从事金融预测、医疗健康、智能制造等领域的工程师和技术人员。 使用场景及目标:①解决高维数据的特征提取难题,提升非线性回归的拟合精度;②通过无监督学习与快速训练能力的结合,提高模型的预测精度和泛化能力;③应用于金融预测、医疗健康、智能制造等多个领域,提供高效的回归预测工具;④通过实时数据流处理和GPU加速推理,确保系统在实时应用中的快速响应。 其他说明:此项目不仅提供了详细的理论分析和代码实现,还涵盖了系统架构设计、模型部署与应用、安全性与用户隐私保护等方面的全面指导。通过结合其他深度学习模型、多任务学习、增量学习等技术,项目具备广阔的扩展性和应用前景。系统还支持自动化CI/CD管道、API服务与业务集成、前端展示与结果导出等功能,确保了系统的高可用性和易用性。
内容概要:本文详细介绍了在工业自动化领域中,针对高速缠绕与横向动作往返排线进给设备的两轴同步控制技术。主要内容涵盖硬件配置、动态补偿算法、配方管理、气缸控制以及速度滤波等方面的技术细节。文中强调了通过动态补偿算法将往返误差控制在极小范围内,利用结构体数组存储不同线径的工艺参数,确保不同型号间的快速切换,并采用二阶滤波算法降低机械冲击。此外,还讨论了气缸与运动轴的协同控制,确保物料夹持的精确性和稳定性。最终实现了两轴同步误差控制在3个脉冲以内,良品率达到99.8%以上的优异表现。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对两轴同步控制有深入研究的需求者。 使用场景及目标:适用于需要高精度同步控制的工业生产设备,如绕线机、切割机等。主要目标是提高生产效率和产品质量,减少因同步误差导致的产品缺陷。 其他说明:文章不仅提供了详细的代码实现,还分享了许多实际调试的经验教训,强调了现场实测数据的重要性。同时,展示了系统的高度移植性,能够在不同品牌的PLC上快速部署和调试。
建模前期用到的打网格软件SMS10.0,非常好用,解压安装无需破解
内容概要:本文详细介绍了白光JBC245/T12/936-A1321/A1322 OLED焊台控制板的开发资料,涵盖完整的C语言程序、原理图、PCB设计文件以及相关照片。资料中不仅提供了详细的硬件设计方案,如电源部分、传感器接口、OLED显示模块等,还包括了关键的PID温度控制算法、状态机式的菜单系统设计、硬件SPI驱动等软件实现细节。此外,文中还特别提到了一些开发中的注意事项和技术技巧,如抗积分饱和、温度响应优化、热电偶信号处理等。 适合人群:电子爱好者、硬件开发工程师、嵌入式系统开发者。 使用场景及目标:适用于想要深入了解焊台控制板设计与实现的技术人员,帮助他们快速掌握从硬件设计到软件编程的全流程,提高开发效率,减少调试时间。同时,也为新手提供了一个很好的学习平台,通过实际案例加深对嵌入式系统开发的理解。 其他说明:资料包内含完整的源代码、原理图、PCB设计文件及校准文档,支持多种焊咀类型的自动识别和温度控制,确保了系统的灵活性和实用性。
Solid Works软件的模型资料
内容概要:本文详细探讨了车辆自适应巡航控制系统(ACC)的设计与实现,特别是针对前车切入这一关键场景。文中介绍了MPC(模型预测控制)算法的工作原理及其在ACC系统中的应用,强调了该算法能够在保证乘车舒适性的前提下,快速减小车距和速度误差。文章还展示了如何使用Carsim 16和Matlab 16B进行联合仿真,具体包括车辆动力学建模、MPC控制器的搭建、目标函数和约束条件的定义,以及一些实用的代码片段。此外,作者分享了在实际调试过程中遇到的问题及解决方案,如传感器延迟、加速度约束设置不当等,并通过实验验证了所提方法的有效性。 适合人群:从事汽车工程、自动化控制领域的研究人员和技术人员,尤其是对智能交通系统感兴趣的读者。 使用场景及目标:适用于希望深入了解ACC系统内部工作机制的研究人员,以及需要掌握MPC算法在实际工程项目中应用的技术人员。目标是帮助读者理解并能够独立实现类似的控制系统,提升车辆行驶的安全性和舒适性。 其他说明:文章不仅提供了详细的理论解释,还包括了许多具体的代码实例,便于读者理解和实践。同时,作者还分享了一些宝贵的实践经验,有助于读者避开常见的陷阱。
内容概要:本文详细介绍了基于Qt5开发的双路串口通信框架,涵盖帧头帧尾解析、数据保存、ini配置与设备通信开发等方面。文中展示了如何通过状态机驱动的方式高效处理数据包,确保通信系统的健壮性和稳定性。此外,还讨论了动态双路串口配置、数据持久化策略以及配置文件管理的具体实现方法。该框架已在多个工业场景中成功应用,表现优异。 适合人群:具有一定Qt开发经验的研发人员,尤其是从事工业设备调试和嵌入式开发的技术人员。 使用场景及目标:适用于需要同时监控多个串口数据的工业设备调试场景,旨在提供稳定可靠的双路串口通信解决方案,帮助技术人员快速理解和实现复杂的串口通信协议。 其他说明:文中提供了大量代码片段和实战技巧,强调了协议处理层与业务逻辑的解耦设计,便于二次开发和协议扩展。
我到测试文件,用于测试用的哈
内容概要:文章介绍了自媒体生态下AI流量智能体服务,旨在解决自媒体内容创作和流量获取中的难题。AI智能体作为低成本甚至零成本的高效助手,能生成高质量的文字、音频、图片和视频内容,尤其在内容仿写、改写、爆款内容生成方面表现突出。文中具体展示了AI工具在短视频、公众号、小红书图文和私域营销等领域的应用实例,如一键改写抖音文案并生成音频、快速提取并分析博主视频文案、将抖音内容转换为小红书风格内容等。此外,还提供了个性化定制选项,如自定义工作流、调整文案风格等,极大提高了内容创作效率。 适合人群:自媒体从业者、企业营销人员以及需要提高内容创作和流量获取效率的相关人士。 使用场景及目标:①利用AI工具快速生成和优化各类自媒体平台(如抖音、小红书、公众号)所需的文字、图片、音频、视频等内容;②通过分析爆款内容逻辑,生成吸引用户的标题和文案,提升作品的曝光率和吸引力;③借助AI智能体实现多流程自动化操作,如自定义数据来源、修改写作风格等,提高工作效率。 其他说明:AI智能体不仅能生成高质量内容,还能根据用户需求进行个性化定制,支持多种内容形式的互转,帮助用户更好地适应不同平台的特点。在使用过程中,应充分利用AI工具提供的各项功能,结合自身需求,灵活调整参数设置,以达到最佳效果。
量子器件仿真:量子通信器件仿真.zip
内容概要:本文详细介绍了ABAQUS与FRANC3D联合仿真在可靠性与机构疲劳研究中的应用。首先概述了这两种软件的特点及其联合仿真的优势,随后具体探讨了单细节和多细节裂纹扩展分析的方法,包括模型创建、边界条件设定和裂纹扩展路径模拟。接着,文章深入讲解了闭合效应、残余应力和腐蚀裂纹扩展的分析方法,展示了如何通过接触属性、热-结构耦合分析和用户子程序(UMAT)来模拟这些现象。此外,还涉及了疲劳寿命预测、应力强度因子和裂纹扩展速率的计算,以及共振疲劳的研究。最后,作者分享了一些实用的编程技巧和经验,帮助研究人员更好地编写相关文献并优化仿真流程。 适合人群:从事材料科学、机械工程、航空航天等领域研究的专业人士,尤其是关注结构疲劳和可靠性分析的研究人员和技术人员。 使用场景及目标:适用于需要精确模拟裂纹扩展、评估材料和结构疲劳寿命的研究项目。主要目标是提供详细的仿真方法和实践经验,帮助研究人员提高仿真精度和效率。 其他说明:文中不仅提供了具体的代码示例,还分享了许多实际操作中的注意事项和技巧,有助于读者避免常见错误并优化仿真效果。
CT2016电子硬件课程设计资源 本资源为电子硬件课程设计提供丰富素材,涵盖电路设计、单片机应用、传感器技术等实用内容,适合学生和爱好者学习实践。包含项目案例、参考代码及设计文档,助你快速掌握硬件开发技能,完成创新项目。高效实用,助力电子设计学习!
该资源为natsort-2.0.0-py2.7.egg,欢迎下载使用哦!
控制系统仿真:滑模控制器仿真.zip
内容概要:本文详细介绍了如何利用FANUC提供的FOCAS开发包在Visual Studio环境中进行数控系统通信开发。主要内容涵盖开发环境搭建、关键API解析、常见错误处理以及一些实用技巧。文中提供了具体的代码示例,帮助开发者快速掌握如何与FANUC数控设备建立稳定可靠的通信连接,读取和写入各种数据,如主轴转速、轴位置等。此外,作者分享了许多实际开发过程中遇到的问题及其解决方案,强调了配置细节和注意事项,如正确选择编译平台、处理数据类型转换、确保网络畅通等。 适合人群:从事工业自动化领域的软件工程师,尤其是那些需要与FANUC数控系统进行交互的开发人员。 使用场景及目标:①帮助开发者熟悉并掌握FANUC FOCAS协议的基本概念和使用方法;②提供详细的步骤指导,确保能够顺利地将开发包集成到自己的项目中;③通过实例演示常见的应用场景,如读取机床状态信息、控制PMC信号等。 其他说明:文章不仅限于理论讲解,还包括大量实践经验分享,对于初学者来说是非常宝贵的参考资料。同时提醒读者关注FANUC官方网站获取最新的技术支持和更新。