问题是接受一个或多个端口,在朋友的帮助下,它们之间有一个空格, 我用这个作为我的答案,但是例如,如果我输入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!');
}
答案 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.";
}
}