0
回答
正则表达式匹配逗号的问题,值得一看
【腾讯云】学生服务器套餐10元/月 >>>   

正则表达式匹配逗号的问题。我用正则表达式验证ip地址,允许在填写ip的时候可以填ip段,用逗号分隔,比如192.168.[3,4].0。用 javascript和jsp写了两个小例子测试成功了一个正则表达式代码。中文逗号和英文逗号测试都没有问题,输入数据到input里测试的,但是到了 项目里正则表达式就对逗号识别不了了。

观察发现,识别不了的这个逗号形状和测试成功的中文,英文逗号都不一样,估计是另一种编码格式,到底是哪种编码格式呢?
除了逗号以外,别的符号,如。. - ~等用正则表达式匹配都是没有问题的。
现在很想知道如何才能正确地匹配上这可爱的逗号?
望高人指点,感激不尽!
匹配符号列表范例:[.,,-~]
下面是匹配逗号失败的代码截取,项目用了struts,代码较多只放一部分。

<table class=adminform width="85%" border="1" align="center" cellpadding="1" cellspacing="0" class="blue">        
        <tr id="tr_ip" class="INPUT"> 
            <td class="text2" class="text2" align="right" width="30%">

                IP段
                <font color="red">*</font>
            </td>
            <td class="text2" class="text2">
                <input type="text" name="ipSegment.ip" maxlength="30" value="192.1.*.[12~13]" onkeyup="validation(this,/^(((25[0-5]|2[0-4]\d|[01]?\d\d?)|([[](25[0-5]|2[0-4]\d|[01]?\d\d?)[.,,-](25[0-5]|2[0-4]\d|[01]?\d\d?)[]])|([*]))[.]){3}((25[0-5]|2[0-4]\d|[01]?\d\d?)|([[](25[0-5]|2[0-4]\d|[01]?\d\d?)[.,,-](25[0-5]|2[0-4]\d|[01]?\d\d?)[]])|([*]))$/
, 'tr_ip');" onblur="validation(this,/^(((25[0-5]|2[0-4]\d|[01]?\d\d?)|([[](25[0-5]|2[0-4]\d|[01]?\d\d?)[.,,-](25[0-5]|2[0-4]\d|[01]?\d\d?)[]])|([*]))[.]){3}((25[0-5]|2[0-4]\d|[01]?\d\d?)|([[](25[0-5]|2[0-4]\d|[01]?\d\d?)[.,,-](25[0-5]|2[0-4]\d|[01]?\d\d?)[]])|([*]))$/
, 'tr_ip');">&nbsp;(***.***.***.***)
            <span id="span_ip" class="red_span">
            EC/SI全局IP段不能为空,且符合IP段的规则,例如:10.[10,11].*.[1~10]
            
            </span>
            </td>
        </tr>
        
        <tr class="INPUT"> 
            <td class="text2" class="text2" align="right" width="30%">

                更新时间
                <font color="red">*</font>
            </td>
            <td class="text2" class="text2">
                2008-08-04 13:59:00
                
            </td>
        </tr>

</table>

为了方便对比,下面我放上测试成功的代码,您可以对比一下,下面是第一个:

<%@page contentType="text/html; charset=GBK" isThreadSafe="false"%>
<html>
<head>
<script language="JavaScript">
    var s = "192.[11,22].*.[11~13]";
    var reg = /^(((25[0-5]|2[0-4]\d|[01]?\d\d?)|(\[(25[0-5]|2[0-4]\d|[01]?\d\d?)[,~](25[0-5]|2[0-4]\d|[01]?\d\d?)\])|([*]))[.]){3}((25[0-5]|2[0-4]\d|[01]?\d\d?)|(\[(25[0-5]|2[0-4]\d|[01]?\d\d?)[,~](25[0-5]|2[0-4]\d|[01]?\d\d?)\])|([*]))$/;
    
    alert(reg.test(s) + " 123");

</script>

</head>

<body>
</body>
</html>

下面是第二段测试成功的代码,主要用javascript来测试的正则表达式

<html><head></head><body><script language="javascript">
/*-----------下边输入正则表达式代码----------*/
function test(s)
{
    //在下边/ /之间填入正则表达式
    var patrn=/^(((25[0-5]|2[0-4]\d|[01]?\d\d?)|(\[(25[0-5]|2[0-4]\d|[01]?\d\d?)[,,~](25[0-5]|2[0-4]\d|[01]?\d\d?)\])|([*]))[.]){3}((25[0-5]|2[0-4]\d|[01]?\d\d?)|(\[(25[0-5]|2[0-4]\d|[01]?\d\d?)[,,~](25[0-5]|2[0-4]\d|[01]?\d\d?)\])|([*]))$/;
    if (!patrn.exec(s)){ 
        return false
    }
    return true
}
/*----------------------------------------------*/
</script>
<p style="color:blue;" align="center">
<br><br><br><br>这里输入原始数据<input type="text" id="x"><br><br>
<input type="button" onClick="document.write('<br>数据?['+x.value+']?的测试结果是:'+test(x.value))" 
value="点击这里测试你的正则表达式" 
style="background-color:rgb(22,207,223)"/><br>
<input type=button onclick="javascript:history.back();" value="返回上一页" style="background-color:rgb(22,207,223)"/></p>
<script language="javascript" type="text/javascript">
var texts = document.getElementsByTagName("input");
for (var i=0;i<texts.length;i++)
{
    if (texts(i).type == "text")
       {
           texts(i).onmouseover = function () {this.focus();}
       }
}
</script></body></html>
  <br>数据?[1.1.1.[1,6]]?的测试结果是:true<br>数据?[1.1.[5,123].[1,6]]?的测试结果是:true
举报
鉴客
发帖于7年前 0回/4K+阅
顶部