怎么用正则来实现下

yesun 2003-08-24 02:08:35
某数组内有元素若干个
分别有可能是“100.*”“100.101.*”“100.101.102.*”“100.101.102.103”几个形式的
也就是大家经常见到的B类IP C类IP等等
首先当然是得到用户的IP啦
<script language=vbscript>
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
</script>
<script language="JavaScript">
var xmlUrl = new ActiveXObject('Microsoft.XMLHTTP');
xmlUrl.Open('GET','http://www.bliao.com:2000/ip.phtml');
xmlUrl.Send();
setTimeout('alert(bytes2BSTR(xmlUrl.ResponseBody))',2000);
</script>

var bytes2BSTR(xmlUrl.ResponseBody)=UserIP
var ipadree=new Array("100.*","101.102.*","102.103.104.*","103.104.105.106")
for (i=0;i<ipadree.length;i++){
..........

后面的我不会写了
现在希望可以做到
数组的元素是103.104.105.106这种形式的时候,直接和UserIP进行判断,那么UserIP是103.104.105.106的话就满足
当数组的元素是102.103.104.*这种形式的时候,如果UserIP属于102.103.104.0到102.103.104.255的时候都满足.
当数组的元素如果是101.102.*这个形式的时候(后面的一个*省略了)的话
如果UserIP属于101.102.0.0到101.102.255.255都满足.
最后,数组的元素如果是100.*这种形式的时候(后面2个*都省略了)
那么UserIP从100.0.0.0到100.255.255.255都满足.

...全文
43 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
找IP中的".",有n个,就有(n+1)段
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
以下是所有形式的判断:
<body MS_POSITIONING="GridLayout">
<INPUT id="t0" name="t0" style="Z-INDEX: 101; LEFT: 70px; WIDTH: 309px; POSITION: absolute; TOP: 55px; HEIGHT: 22px" type="text" value="在此输入判断形式,如:一段12,二段123.43,三段123.3.34,四段33.34.23.53" size="46">
<INPUT id="t1" name="t1" type="text" style="Z-INDEX: 102; LEFT: 77px; POSITION: absolute; TOP: 112px" onfocus ="this.value=t0.value">
<INPUT onclick="run(t1)" type="button" value="判断" style="Z-INDEX: 103; LEFT: 264px; POSITION: absolute; TOP: 109px">
<script>
function run(obj)
{
var str=new String();
var str1=new String();
str=obj.value;
str=obj.value;
str1=t0.value;
var strReg=new RegExp(str1);
var bl=strReg.exec(str);

if (bl)
{
var str2=new String();
str2=str.substring(str1.length,str.length);
var strReg1=new RegExp();
var count=0;
for(i=0;i<str1.length ;i++)
{
if (str1.charAt(i)==".")
count++;
}
if (count==0)
strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;
else if(count==1)
strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;
else if(count==2)
strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;
else
strReg1=/^$/;

var b2=strReg1.exec(str2);
if (b2)
alert("合法!");
else
alert("不合法!");
}

else

alert("不合法!");

}
</script>


</body>
yesun 2003-08-24
  • 打赏
  • 举报
回复
已经准备结贴了~
一些小问题:怎么判断元素是几位的IP?
还有4种不同的元素要写4个不同的正则吗?
能不能根据如果是*的话当段就是从0到255,下段也是从0到255(如果还有下段的话)
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
我刚给的例子是针对验证前两段已经的IP,而不是所有的,所以你输入不合法,当然判断无效!
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
很简单,只输入第一段只要把strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;

改为:strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;

只输入前三段则改为:
strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;
yesun 2003-08-24
  • 打赏
  • 举报
回复
输入
4.11.254
判断
4.11.254.11 不合法

都乱套了~~
yesun 2003-08-24
  • 打赏
  • 举报
回复
输入
100
判断 100.123.123.123 不合法

输入
100.11.254
判断111100.11.254.1 合法

可怕。。
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
判断三位的时候有错,应该是:
(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])

试试:
<body MS_POSITIONING="GridLayout">
<INPUT id="t0" name="t0" style="Z-INDEX: 101; LEFT: 70px; WIDTH: 309px; POSITION: absolute; TOP: 55px; HEIGHT: 22px" type="text" value="在此输入前两段已定的ip形式,如123.34或13.254等等" size="46">
<INPUT id="t1" name="t1" type="text" style="Z-INDEX: 102; LEFT: 77px; POSITION: absolute; TOP: 112px" onfocus ="this.value=t0.value">
<INPUT onclick="run(t1)" type="button" value="判断" style="Z-INDEX: 103; LEFT: 264px; POSITION: absolute; TOP: 109px">
<script>
function run(obj)
{
var str=new String();
var str1=new String();
str=obj.value;
str=obj.value;
str1=t0.value;
var strReg=new RegExp(str1);
var bl=strReg.exec(str);

if (bl)
{
var str2=new String();
str2=str.substring(str1.length,str.length);
var strReg1=new RegExp();
strReg1= /^.(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5]).(\d|\d\d|[0-1]\d\d|[2][0-4]\d|[2][5][0-5])$/;
var b2=strReg1.exec(str2);
if (b2)
alert("合法!");
else
alert("不合法!");
}

else

alert("不合法!");

}
</script>
</body>
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
<body MS_POSITIONING="GridLayout">
<INPUT id=t0 name =t0 style="Z-INDEX: 101; LEFT: 79px; POSITION: absolute; TOP: 68px" type="text" value ="在此输入前两段已定的ip形式,如123.34或13.254等等">
<INPUT id="t1" name="t1" type="text" style="Z-INDEX: 102; LEFT: 77px; POSITION: absolute; TOP: 112px">
<INPUT onclick="run(t1)" type="button" value="判断" style="Z-INDEX: 103; LEFT: 264px; POSITION: absolute; TOP: 109px">
<script>
function run(obj)
{
var str=new String();
var str1=new String();
str=obj.value;
str=obj.value;
str1=t0.value;
alert(str1);
var strReg=new RegExp(str1);
var bl=strReg.exec(str);

if (bl)
{
var str2=new String();
str2=str.substring(str1.length,str.length);
alert(str2);
var strReg1=new RegExp();
strReg1= /^.(\d|\d\d|[1-2][0-5][0-5]).(\d|\d\d|[1-2][0-5][0-5])$/;
var b2=strReg1.exec(str2);
if (b2)
alert("合法!");
else
alert("不合法!");
}

else

alert("不合法!");

}
</script>
</body>
yesun 2003-08-24
  • 打赏
  • 举报
回复
不在乎麻烦,在乎能用
我快被这个折磨死了
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
那也可以,只是要麻烦一点!~`
yesun 2003-08-24
  • 打赏
  • 举报
回复
我知道道理一样啊
但是元素是经常增加和减少的啊
有没有一个先判断元素前面的值再写正则的办法
那样的话我不用修改正则啊
直接修改元素就可以了啊
元素就只有那么几种形式,但有很多不同的值啊~~
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
道理一样!~``
yesun 2003-08-24
  • 打赏
  • 举报
回复
shyslysky(飞天) 写得比我的朋友的好多了~~
但要是元素变了呢?原来的表达是否还有效?
yesun 2003-08-24
  • 打赏
  • 举报
回复
/^103\.104\.105\.106$/
/^102\.103\.104\.\d{1,3}$/
/^101\.102\.\d{1,3}\.\d{1,3}$/
/^100\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
这个是我的一个朋友发给我的
我就是不知道正则怎么用
唉~~~~~
我觉得元素都不是固定的啊,这样写的话要是元素变了呢?
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
103.104.105.106的正则:
/^103.104.105.106$/

102.103.104.*的正则:
/^102.103.104.(\d|\d\d|[1-2][0-5][0-5])$/

101.102.*的正则:
/^101.102.(\d|\d\d|[1-2][0-5][0-5]).(\d|\d\d|[1-2][0-5][0-5])$/

100.*的正则:
/^100.(\d|\d\d|[1-2][0-5][0-5]).(\d|\d\d|[1-2][0-5][0-5]).(\d|\d\d|[1-2][0-5][0-5])$/


以102.103.104.*为例:

<body MS_POSITIONING="GridLayout">

<INPUT id=t1 name =t1 type="text">
<INPUT onclick=run(t1) type="button" value="判断">
<script>
function run(obj)
{
var str=new String();
str=obj.value;
var strReg=new RegExp();
strReg= /^102.103.104.(\d|\d\d|[1-2][0-5][0-5])$/;
var bl=strReg.exec(str);

if (bl)
alert("合法!");
else

alert("不合法!");

}
</script>
</body>



yesun 2003-08-24
  • 打赏
  • 举报
回复
ip未必是102.103.104.*开始的
如果元素变成102.103.105.*的话这个正则还有效吗?
shyslysky 2003-08-24
  • 打赏
  • 举报
回复
102.103.104.*

/^102.103.104.(\d|\d\d|[1-2][0-5][0-5])$/

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧