文本框验证接受javascript中的端口

时间:2011-07-06 08:25:53

标签: javascript textbox

问题是接受一个或多个端口,在朋友的帮助下,它们之间有一个空格, 我用这个作为我的答案,但是例如,如果我输入88888,它会提醒我这样的事情: 88888NaNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

我该如何纠正这个

<script type="text/javascript">
function portvalidating(field)
{
    var output='';
    m=field.value;
    if(/^\d{1,5}([ ]\d{1,5})*$/.test(m))
    {
        var parts = m.split(' ');
        for(i in parts)
        {
            var p= parseInt(parts[i]);
            if(!((0 <= p) && (p<= 65535) && !isNaN(p)))
            {
                output+=p;
            }
        }
        if(output=='')
            var dummy=1;
        else alert(output+'is not correct');
    }
    else alert('please enter a valid port!');
}

4 个答案:

答案 0 :(得分:1)

不幸的是,正则表达式无法处理'范围',所以你不能完全按照你想要的方式使用regexp(你可以这么做,但是正则表达式会比较厚片,hiper很长)。

但是,您可以使用此正则表达式验证以空格分隔的数字:

/^\d{1,5}([ ]\d{1,5})*$/

除了验证您提供的范围外,这将执行您想要的操作。但是它控制着数字在1到5位之间,以及你问的其他事情。

希望这会有所帮助。干杯

答案 1 :(得分:1)

没有太多错误检查的原始正则表达式将是:exp = /\d{1,5}/g然后在您的字符串上调用.match(exp)。但是,您需要使用parseInt将输出转换为数字,以便您可以根据约束检查它的值。

我认为如果没有正则表达式,你可以更容易地做到这一点。拆分和解析字符串的一些快速代码是:

var s = "21 456 -32 70000";
var parts = s.split(' ');
var output;
for(i in parts)
{
  p = parseInt(parts[i]);
  if( (0 <= p) && (p <= 65535) && !isNaN(p) )
    output += p+"<br />";
}

希望这在某种程度上有所帮助。

答案 2 :(得分:0)

(6553[0-5]|655[0-2][0-9]|65[0-4][0-9][0-9]|6[0-4][0-9][0-9][0-9]|\d{2,4}|[1-9])

答案 3 :(得分:0)

如果您希望通过RegEx验证一个简单的Integer值,我认为您会在此处损害您的性能。

IMO,尝试使用Space (' ')对字符串进行spiting,然后将每个值转换为Integer并执行myInt < 65535

for( String str : portNumbers.split(' ') ){
  try{
    int i = Integer.parseInteger( str );
    if( 0 > i && i > 65535 ){
      errorMessage = str + " is out of range.";
    }
  }catch (NumberFormatException e) {
    errorMessage = str + " is not a valid port.";
  }
}