中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求达人编个检验子网掩码是否正确的批处理
作者:
标题: 求达人编个检验子网掩码是否正确的批处理 上一主题 | 下一主题
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『楼 主』:  求达人编个检验子网掩码是否正确的批处理

RT

2007-7-28 12:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 2 楼』:  

俺只找到了这个:
利用javascript验证子网掩码的合法性
先使用正则表达式来验证(^((\d|[01]?\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[01]?\d\d|2[0-4]\d|25[0-5])$)|^(\d|[1-2]\d|3[0-2])$,再使用下面的方法(ip地址的正则表达式为^((\d|[01]?\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[01]?\d\d|2[0-4]\d|25[0-5])$,mac地址的正则表达式为([0-9a-fA-F]{2}[-:]){5}[0-9a-fA-F]{2}$)
mask是子网掩码的input,view是alert的字段,number是一个hidden,用来获取从左到右最后一个1是第几位
function maskValidate(form,mask,view,number){
var netMask=mask.value;
var netMask0=netMask.split(".")[0];
var reg
var tmp=128;
flaglength=0;
startlength=0;
endlength=0;
flag=0;
var myReg = /^(\d|[1-2]\d|3[0-2])$/;
if(netMask.match(myReg) || netMask==""){
  number.value=netMask;
  return true;
}else if(netMask!="" && (netMask.split(".")[0]!=0 || netMask.split(".")[1]!=0 || netMask.split(".")[2]!=0 || netMask.split(".")[3]!=0)){
     if((tmp & netMask0)==0){
      alert(view+"不合法");
      return false;
     }
     var tmpMask=netMask0;
         
        for(var i=0;i<4;i++){
         startlength=0;
         tmpMask=netMask.split(".")[i];
   for(var j=0;j<8;j++){
    if(flag==0 && (tmp & tmpMask)==0){
        tmpMask=(tmpMask<<1);
     flag=1;
     startlength=j+i*8;
     
    }else if(flag==1 && (tmp & tmpMask)==128){
     alert(view+"不合法");
     return false
    }else{
     tmpMask=(tmpMask<<1);
    }  
   }
  
  }
  number.value=startlength;
}
return true;
}

2007-7-28 12:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 3 楼』:  

找到JS不就一样嘛?

2007-7-28 13:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lg560852
初级用户





积分 60
发帖 26
注册 2006-12-31
状态 离线
『第 4 楼』:  

:enda
echo %yy%
set /p uu=输入子网掩码(格式:255.255.255.0):
echo %uu%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto failb
set _uu=%uu:.= %
call :checkb %_uu%
goto end

:checkb
if "%4"=="" goto failb
if "%1"=="0" goto failb
if %4 gtr %3 goto failb
if %3 gtr %2 goto failb
if %2 gtr %1 goto failb
for %%u in (%1 %2 %3 %4) do (if %%u gtr 255 goto failb

for %%t in (0,128,192,224,240,248,252,254,255) do (if "%%u"=="%%t" goto endb)
goto failb)


:failb
::cls
echo                    %uu%是错误的子网掩码!!
echo.
pause
goto enda

:endb
:end

这段代码为什么%U只执行一遍??


运行后:

C:\>echo
ECHO 处于打开状态。

C:\>set /p uu=输入子网掩码(格式:255.255.255.0):
输入子网掩码(格式:255.255.255.0):255.255.255.1

C:\>echo 255.255.255.1  | findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$" 1>nul  || g
oto failb

C:\>set _uu=255 255 255 1

C:\>call :checkb 255 255 255 1

C:\>if "1" == "" goto failb

C:\>if "255" == "0" goto failb

C:\>if 1 GTR 255 goto failb

C:\>if 255 GTR 255 goto failb

C:\>if 255 GTR 255 goto failb

C:\>for %u in (255 255 255 1) do (
if %u GTR 255 goto failb
for %t in (0 128 192 224 240 248 252 254 255) do (if "%u" == "%t" goto endb )

goto failb
)

C:\>(
if 255 GTR 255 goto failb
for %t in (0 128 192 224 240 248 252 254 255) do (if "255" == "%t" goto endb )

goto failb
)

C:\>(if "255" == "0" goto endb )

C:\>(if "255" == "128" goto endb )

C:\>(if "255" == "192" goto endb )

C:\>(if "255" == "224" goto endb )

C:\>(if "255" == "240" goto endb )

C:\>(if "255" == "248" goto endb )

C:\>(if "255" == "252" goto endb )

C:\>(if "255" == "254" goto endb )

C:\>(if "255" == "255" goto endb )

C:\>goto end

2007-7-28 13:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: