Board logo

标题: 求达人编个检验子网掩码是否正确的批处理 [打印本页]

作者: lg560852     时间: 2007-7-28 12:48    标题: 求达人编个检验子网掩码是否正确的批处理

RT
作者: lg560852     时间: 2007-7-28 12:50
俺只找到了这个:
利用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;
}
作者: wudixin96     时间: 2007-7-28 13:25
找到JS不就一样嘛?
作者: lg560852     时间: 2007-7-28 13:36
: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




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5