`
eksliang
  • 浏览: 598306 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

     转载请出自出处:http://eksliang.iteye.com/blog/2098985  

     下面这些验证脚本,是我在这几年开发中的总结,今天把他放出来,也算是一种分享吧,现在在我的项目中也在用!包括日期验证、比较,非空验证、身份证验证、数值验证、Email验证、电话验证等等...!

       下面这些方法都有一个特点,就是有两份,因为是表单验证,所以提供了两种实现方式,第一种传入的是表单的ID,另一种传入的是表单的值!

        我在下面附件中还附带了这个脚本的源文件!

/**
 *@author Ickes
 *下面很多方法都依赖这个方法
 */
function _$(id){
	return document.getElementById(id);
}
/**
 * @author Ickes
 * 传入一个字符串,删除字符串左右两边的空格
 * @param str<br>
 *        要去除空格的字符串
 * @param type<br>
 *        -如果不传则去掉两端的空格    <br>
 *        -如果为L或者l则去掉左边的空格<br>
 *        -如果为R或者r则去掉右边的空格<br>
 * @return
 */
function trim(str,type){
	 if(type=="" || type==null){
		 return str.replace(/(^\s*)|(\s*$)/g, "");   
	 }else if(type.toLocaleLowerCase()=="r"){
		 return  str.replace(/(\s*$)/g,"");  
	 }else if(type.toLocaleLowerCase()=="l"){
		 return  str.replace(/(^\s*)/g,""); 
	 } 
}

/****
 *@author Ickes
 * 根据id验证文本框中输入的是不是为空
 * 如果为null则返回true
 **/
function checkNull(_id){
	var v=_$(_id).value;
	v=trim(v);
	if(v==''){
		return true;
	}else{
		return false;
	}
}

/**
 *@author Ickes
 * 返回系统当前日期
 * @return
 *      返回格式:yyyy-MM-dd
*/
function getDate(){
	var d;
	var s='';
    d = new Date();                           
    s +=  d.getFullYear() + "-";   
    //月
    var moth=d.getMonth() + 1;
    if(moth<10){
        s += "0"+moth+ "-";    
    }else{
      	s += moth + "-";
    }
    //日
    var date=d.getDate();
    if(date<10){
      	s += "0"+date;  
    } else{
        s += date;  
    }                      
    return(s);                               
}

/**
 * @author Ickes
 * 返回系统当前日期时间
 * @return
 *      返回格式:yyyy-MM-dd hh:mm:ss
*/
function getDateTime(){
	var d;
	var s='';
    d = new Date();                           
    s +=  d.getFullYear() + "-";   
    //月
    var moth=d.getMonth() + 1;
    if(moth < 10){
        s += "0" +moth+ "-";    
    }else{
      	s += moth + "-";
    }
    //日
    var date=d.getDate();
    if(date < 10){
      	s += "0" + date + " ";  
    } else{
        s += date+" ";  
    }  
    //小时
    var hours=d.getHours();
    if(hours < 10){
    	s += "0" +hours+ ":";
    }else{
    	s +=hours+":";
    }
    //分钟
    var minutes = d.getMinutes();
    if(minutes < 10){
    	s += "0" +minutes+ ":";
    }else{
    	s += minutes+ ":";
    }
    //秒钟
    var seconds = d.getSeconds();
    if(seconds < 10){
    	s += "0"+seconds;
    }else{
    	s += seconds;
    }
    return(s);                               
}


/****
 *@author Ickes
 *格式化日期<br>
 *@param str
 *       要格式的字符串<br>
 *@例子:
 *      2012-12-12  <br>转换成<br> 2012/12/12 
 **/
function formatDate(str){
	return str.split("-").join("/");
}
/**
 *@author Ickes
 *比较两个日期的大小,日期的格式为2012-12-12或2012/12/12 <br>
 *@param _startId
 *         开始日期文本框的Id
 *@param _endId
 *         结束日期文本框的Id
 *@retur
 *       如果结束日期大于开始日期则返回true<br>
 **/
function compareDateId(_statId,_endId){
	var startDate = formatDate(_$(_statId).value);
	var endDate   = formatDate(_$(_endId).value);
	var time1=Date.parse(startDate);
	var time2=Date.parse(endDate);
    if(time1 > time2){
		return false;
	}
	return true;
}
/**
 *@author Ickes
 *比较两个日期的大小,日期的格式为2012-12-12或2012/12/12 <br>
 *@param start
 *       开始日期
 *@param end
 *       结束日期
 *@retur
 *       如果结束日期大于开始日期则返回true<br>
 **/
function compareDateStr(start,end){
	var startDate = formatDate(start);
	var endDate   = formatDate(end);
	var time1=Date.parse(startDate);
	var time2=Date.parse(endDate);
    if(time1 > time2){
		return false;
	}
	return true;
}


/****
 *@author Ickes
 * 提交表单
 * @param _id 
 *         要提交表单的id
 * @param url 
 *         路径
 * @param method
 *         补填就是默认:post
 */
function _submit(_id,url,method){
	if(method=="" || method==null){
		method="post";
	}
	_$(_id).method=method;
	_$(_id).action=url;
	_$(_id).submit();
}


 /**
  * @author Ickes
  * 传入一个字符串__返回他的所占用的字节<br>
  * @return
  *       所占用的字节
  */
 function byteLen(s) { 
	var l = 0; 
	var a = s.split(""); 
	for (var i=0;i<a.length;i++) { 
		if (a[i].charCodeAt(0)<299) { 
			l++; 
		} else { 
			l+=2; 
		} 
	} 
		return l; 
}
/****
 * @author Ickes
 * 根据id验证文本框中输入的是不是数值
 * @param
 *       文本框的Id
 * @return
 *        是数值就返回true,空返回false
 **/
function isNumId(_id){
	var value=_$(_id).value;
	//去掉字符串两端的空格
	value=trim(value);
	if(value==''){
        return false;
    }
    var flg=isNaN(value);
	return !flg;
}

/**
 * @author Ickes
 * 根据id验证文本框中输入的是不是数值<br>
 * @param _value
 *        要判断的值
 * @return
 *        是数值就返回true,空返回false
 **/
function isNum(_value){
	//去掉字符串两端的空格
	value=trim(_value);
	if(value==''){
        return false;
    }
    var flg=isNaN(value);
	return !flg;
}


/****
 * @author Ickes
 *根据id验证是否是一个合格的email<br>
 *@param
 *     文本框id属性  
 *@return
 *	   为空时返回false<br>
 *	   如果是一个合法的email则返回true
 **/
function isEmail(_id){
	 var srt=/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
	 var email=_$(_id).value;
	 if(email==null || email==""){
		 return false;
	 }
     if(srt.test(email)) {
         //合法时
         return true;
     }
     else{
         //不合法时
       return false;
     }
}

/**
 *@author Ickes
 *是否是电话号码	
 *@param _id:
 *        文本框中的id属性
 *@return
 *        为空时返回false<br>
 *        如果是一个合法的电话则返回true
 */
function isTelId(_id){
	var str=_$(_id).value;
    if(str==null || trim(str)==""){
    	return false;
    }
    var str	= trim(str);
	var myphone = /^[\-0-9+()\/]{1,32}$/;
    if(myphone.test(str)){
    	return true;
    } 
    return false;
}

/**
 *@author Ickes
 *字符串是否为合法的电话号码	
 *@param str:
 *        要验证的字符串
 *@return
 *        如果是一个合法的电话则返回true
 */
function isTel(str){
    if(str==null||trim(str)==""){
    	return false;
    }
    var str	= trim(str);
	var myphone = /^[\-0-9+()\/]{1,32}$/;
    if(myphone.test(str)){
    	return true;
    } 
    return false;
}

/**
 * @author Ickes
 * 身份证号码验证-支持新的带x身份证
 * @param num:
 *        要验证的字符串
 * @return   
 *        如果是一个合法的身份证则返回true
 */
function isCardNo(num){
	num=trim(num);
    var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
    var error;
    var varArray = new Array();
    var intValue;
    var lngProduct = 0;
    var intCheckDigit;
    var intStrLen = num.length;
    var idNumber = num;       
    var checkDate = function(date) {
      return true;
    } 
    
    // initialize
    if ((intStrLen != 15) && (intStrLen != 18)) {
        //error = "输入身份证号码长度不对!";
        //alert(error);
        //frmAddUser.txtIDCard.focus();
        return false;
    }    
    // check and set value
    for(i=0;i<intStrLen;i++) {
        varArray[i] = idNumber.charAt(i);
        if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
            //error = "错误的身份证号码!.";
            //alert(error);
            //frmAddUser.txtIDCard.focus();
            return false;
        } else if (i < 17) {
            varArray[i] = varArray[i]*factorArr[i];
        }
    }
    if (intStrLen == 18) {
        //check date
        var date8 = idNumber.substring(6,14);
        if (checkDate(date8) == false) {
            //error = "身份证中日期信息不正确!.";
            //alert(error);
            return false;
        }        
        // calculate the sum of the products
        for(i=0;i<17;i++) {
            lngProduct = lngProduct + varArray[i];
        }        
        // calculate the check digit
        intCheckDigit = 12 - lngProduct % 11;
        switch (intCheckDigit) {
            case 10:
                intCheckDigit = 'X';
                break;
            case 11:
                intCheckDigit = 0;
                break;
            case 12:
                intCheckDigit = 1;
                break;
        }        
        // check last digit
        if (varArray[17].toUpperCase() != intCheckDigit) {
            //error = "身份证效验位错误!正确为: " + intCheckDigit + ".";
            //alert(error);
            return false;
        }
    } 
    else{        //length is 15
        //check date
        var date6 = idNumber.substring(6,12);
        if (checkDate(date6) == false) {
            //alert("身份证日期信息有误!.");
            return false;
        }
    }
    //alert ("Correct.");
    return true;
}

/**
 * @author Ickes
 * 身份证号码验证-支持新的带x身份证
 * @param _id:
 *         文本框的Id属性
 * @return   
 *         如果是一个合法的身份证则返回true
 */
function isCardNoId(_id){
	var num=trim(_$(_id).value);
	if(num==null || num==""){
		return false;
	}
    var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
    var error;
    var varArray = new Array();
    var intValue;
    var lngProduct = 0;
    var intCheckDigit;
    var intStrLen = num.length;
    var idNumber = num;       
    var checkDate = function(date) {
      return true;
    } 
    
    //身份证号码长度
    if ((intStrLen != 15) && (intStrLen != 18)) {
        return false;
    }    
    // check and set value
    for(i=0;i<intStrLen;i++) {
        varArray[i] = idNumber.charAt(i);
        if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
            //error = "错误的身份证号码!.";
            return false;
        } else if (i < 17) {
            varArray[i] = varArray[i]*factorArr[i];
        }
    }
    if (intStrLen == 18) {
        //check date
        var date8 = idNumber.substring(6,14);
        if (checkDate(date8) == false) {
            //error = "身份证中日期信息不正确!.";
            //alert(error);
            return false;
        }        
        // calculate the sum of the products
        for(i=0;i<17;i++) {
            lngProduct = lngProduct + varArray[i];
        }        
        // calculate the check digit
        intCheckDigit = 12 - lngProduct % 11;
        switch (intCheckDigit) {
            case 10:
                intCheckDigit = 'X';
                break;
            case 11:
                intCheckDigit = 0;
                break;
            case 12:
                intCheckDigit = 1;
                break;
        }        
        // check last digit
        if (varArray[17].toUpperCase() != intCheckDigit) {
            //error = "身份证效验位错误!正确为: " + intCheckDigit + ".";
            //alert(error);
            return false;
        }
    } 
    else{        //length is 15
        //check date
        var date6 = idNumber.substring(6,12);
        if (checkDate(date6) == false) {
            //alert("身份证日期信息有误!.");
            return false;
        }
    }
    return true;
}
/**
 * @author Ickes
 * 如果身份证是合法的身份证,则返回日期部分的时间对象
 * @param card
 *        身份证号码
 * @return
 *        返回出生日期
 */
function getCardDate(card){
	var date="";
	var year="";
    var moth="";
	var day="";
	if(card.length==18){
		 date=card.substring(6,14);
		 year=date.substring(0,4);
		 moth=date.substring(4,6);
		 day =date.substring(6,8);
		 date=year+"/"+moth+"/"+day;
	}else{
		 date=card.substring(6,12);
		 year="19"+date.substring(0,2);
		 moth=date.substring(2,4);
		 day =date.substring(4,6);
		 date=year+"/"+moth+"/"+day;
	}
	return new Date(date);
}

/****
 * @author Ickes
 * 根据id在指定的文本后面显示错误信息
 **/
function showError(_id,error){
	_$(_id).innerHTML='';
	_$(_id).innerHTML="<font color='red'>"+error+"<font>";
}

 

分享到:
评论

相关推荐

    yolov10预训练模型.rar

    在按照YOLOv10官网上的步骤进行时,运行app.py文件时,如果没有预训练模型的话会报错。解压压缩包里的内容到同级目录下(在requirements.txt文档下面),这样运行后就不会报错。

    Linux Socket编程、IO模型及进程间通信的完整实用案例

    在IT领域,Linux系统是广泛应用于服务器和嵌入式设备的操作系统。对于系统开发者和管理员,深入理解Linux的Socket编程、IO模型以及进程间通信(IPC)是至关重要的。本资料包提供了三个主要部分的学习资源:`process_comm`涉及进程间通信,`linux_socket`涵盖Socket编程,而`io_mode`则讨论Linux的IO模型。接下来,我们将详细探讨这些关键知识点。 让我们来看看**Linux Socket编程**。Socket是网络通信的基本接口,它允许两个或多个进程通过网络进行数据交换。在Linux中,Socket编程通常涉及到以下步骤:创建Socket,绑定IP地址和端口号,监听连接请求,接受连接,发送和接收数据,最后关闭Socket。`linux_socket`目录可能包含了示例代码,演示如何创建TCP或UDP Socket,处理并发连接,以及实现基本的错误处理机制。理解Socket编程有助于开发网络服务,如Web服务器、FTP服务器等。 我们来讨论**Linux IO模型**。在Linux中,有五种主要的IO模型:阻塞IO、非阻塞IO、IO复用(

    apsw-3.38.5.post1-cp310-cp310-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aiohttp-3.6.2-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    课设毕设基于SpringBoot+Vue的大学生创业项目的信息管理系统源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

    计算机体系结构实验3 多cache一致性算法

    湖大计算机体系结构实验

    arctic-1.67.1-cp27-cp27m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    Toad Data Modeler:Toad中数据字典的创建与管理.docx

    Toad Data Modeler:Toad中数据字典的创建与管理.docx

    #-ssm-048-mysql-在线读书与分享论坛-.zip

    前台: 用户读书笔记,心得查看,并且可以支持调用第三方组建,进行实时聊天 在线图书阅读,一本书里,有多个章节,阅读到某个章节,可以保存阅读进度,比如阅读第一章了,点击提交,可以存储阅读进度,在个人后台查看阅读进度 用户注册 后台: 管理员: 管理员用户管理 注册用户管理 书籍类别管理 书籍信息管理 阅读进度管理 分享阅读心得,笔记管理 系统管理 注册用户: 个人资料修改 分享阅读心得,笔记(下拉表,选择类别) 个人阅读进度查看

    SolarWinds数据库性能分析器:高级功能:SQL分析与优化.docx

    SolarWinds数据库性能分析器:高级功能:SQL分析与优化.docx

    电子商务之价格优化算法:动态定价:价格战与市场动态.docx

    电子商务之价格优化算法:动态定价:价格战与市场动态.docx

    apsw-3.30.1.post1-cp35-cp35m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    VB程序实例-MMControl控件播放多媒体文件.zip

    基于VB的程序实例,可供参考学习使用

    基于java的旅游推荐系统设计与实现答辩PPT.pptx

    基于java的旅游推荐系统设计与实现答辩PPT.pptx

    原版atom-0.10.0-cp311-cp311-win_arm64.whl-下载即用直接pip安装.zip

    安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起

    astropy-5.0.4-cp38-cp38-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aggdraw-1.3.14-cp39-cp39-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    VB程序实例-控件随着窗口大小按比例变化.zip

    基于VB的程序实例,可供参考学习使用

    基于Java Swing实现的飞机大战游戏.zip

    《基于Java Swing实现的飞机大战游戏》是一份旨在帮助学习者掌握Java编程和游戏开发的资源。该资源通过一个完整的飞机大战游戏实例,展示了如何使用Java语言结合Swing库进行桌面应用程序开发。本资源不仅包含详细的源码,还提供了相关文档、课程设计报告及视频教程,适合作为计算机科学与技术、软件工程等专业的课程设计或毕业设计项目。游戏功能包括玩家控制飞机移动、自动发射子弹、敌机随机出现与移动、碰撞检测以及游戏得分计算等。此外,还加入了背景音乐和音效,增强了游戏体验。通过多线程技术确保游戏流畅运行,同时采用面向对象编程思想构建了清晰的项目结构。总之,《基于Java Swing实现的飞机大战游戏》是一个理想的学习工具,它能够帮助初学者深入理解Java GUI编程和事件处理机制,同时也为有经验的开发者提供了实战演练的机会。

    基于SpringBoot整合WebSoket完整源码分享给需要的同学

    **正文** 在现代Web开发中,实时通信是一个重要的需求,SpringBoot框架提供了与WebSocket的集成,使得开发者可以方便地在应用程序中实现双向通信。本文将深入探讨如何在SpringBoot项目中整合WebSocket,以及相关的概念和技术。 WebSocket协议是HTML5引入的一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,极大地提高了实时性。而SpringBoot作为Spring框架的轻量级版本,简化了配置和启动流程,使得开发WebSocket应用变得更加便捷。 我们需要在`pom.xml`中添加SpringBoot WebSocket的相关依赖。SpringBoot默认集成了Spring Websocket,我们只需要引入`spring-boot-starter-websocket`模块即可: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId

Global site tag (gtag.js) - Google Analytics