public static bool IsIpAddress(string address)
{
int segment = 0;
int dotcount = 0;
for (int i = 0; i < address.Length ; i++)
{
char c = address[i];
if (c == '.')
{
if (address[i + 1] == '.')
// Disallow multiple dots in a row
//索引超出数组界限
return false; if (segment > 255)
return false;
if (dotcount==0 && segment==0)
return false;
dotcount++;
segment = 0;
}
else if (c < '0' || c > '9')
return false;
if (c != '.')
segment = segment * 10 + c - '0';
}
if (dotcount != 3)
return false; if (segment > 255)
return false; return true;
}这是一个IP地址格式判断的代码,但是如果我输入的是已.结尾时如(192.168.1.)就会报这样的错误,求人讲解这是为什么?怎么改正
{
if (address[i + 1] == '.')
// Disallow multiple dots in a row
//索引超出数组界限
return false;假如:第一个如果等于'.'是最后一位,下面那个if (address[i + 1] == '.')肯定会超出边界的。因为前而那个已经是最后位。
if (c == '.')
{
if ((i+1) == address.Length)
return false;
上面这行检查最后一个.的时候,就超出索引了
{
if(address.EndsWith(".")) return false;
}
/// <summary>
/// 检测串值是否为合法的格式
/// </summary>
/// <param name="strRegex">正则表达式</param>
/// <param name="strValue">要检测的String值</param>
/// <returns>成功返回true 失败返回false</returns>
public static bool CheckIsFormat(string strRegex,string strValue)
{
if(strValue != null && strValue.Trim() != "")
{
Regex re = new Regex(strRegex);
if (re.IsMatch(strValue))
{
return true;
}
else
{
return false;
}
}
return false;
}
调用:
bool b = CheckIsFormat(@"\d+\.\d+\.\d+\.\d+", "112.23.1.343"); 返回true
bool b = CheckIsFormat(@"\d+\.\d+\.\d+\.\d+", "112.23.1."); 返回false
address[i + 1]出错
{ string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
Regex check = new Regex(pattern);
bool valid = false;
if (addr == "")
{
valid = false;
}
else
{
valid = check.IsMatch(addr, 0);
}
return valid;
}
if(!re.IsMath(ipStr)) return false;if (address[i + 1] == '.') 这个在i=address.length的时候就超出索引了,所以会报错