2011-03-17 61 views
2

在我的iPhone应用程序用户可以输入特定的IP地址/ URL来连接到他们自己的服务器,我试图检查输入地址的有效性。因此,如果用户输入类似“1234”的内容,应用程序会发出错误信息,因为它不会像“IP地址”或URL一样“看起来”。 现在,我尝试使用下面的方法来实现:iPhone SDK:如何检查IP有效性?

- (BOOL)urlIsValid:(NSString *)address { 

NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; 
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
return [urlTest evaluateWithObject:address]; 
} 

它我还以为是工作得很好,但现在显然即使我输入正确的IP地址的方法将返回“NO ”。 关于什么可能是错误的任何想法? 在此先感谢!

回答

1

阅读Apple Docs
尤其是清单1中,其中代码表示if (theConnection)

+0

并没有真正提供任何帮助,因为它没有提供关于如何检查输入的IP地址符合一定的非标准任何文件... – Chris 2011-03-17 23:05:23

+0

对不起。我没有完全明白你刚才所说的。你的意思是**某些标准的IP地址。你能否举一个例子来表明你认为有效和无效的内容。
我只是假设你想检查服务器的存在 – 2011-03-17 23:15:28

+0

那么理论上用户可以在提供的文本框中输入任何东西作为IP地址。因此用户可以输入完全随机的内容,如“bla”或“$$”。在这种情况下,我需要一种方法来检查输入的文本是否实际上是IP地址的潜在候选者,然后我可以检查地址后面是否有实际的服务器。我希望这更好理解。 – Chris 2011-03-17 23:34:01

0

使用NSPredicate这是矫枉过正,也不是真正它是什么打算。您应该使用NSRegularExpression进行正则表达式匹配。但是,要完全验证一个正则表达式的IP地址,至少可以说是很麻烦的。

0

我以这种方式验证ip地址,尝试添加http(s)前缀,所以它应该是工作。

NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; 
NSPredicate *ipTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
return [ipTest evaluateWithObject:address]; 

好运