在我的iphone应用程序中,用户可以输入特定的ip-address / URL连接到他们自己的服务器,我正在尝试检查输入的地址的有效性。因此,如果用户输入类似“1234”的内容,则应用程序会抛出错误,因为它不会“看起来”像ip-address或URL。 现在我正试图通过使用以下方法来实现这一目标:
- (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-address,该方法也会返回“NO”。 关于什么可能出错的任何想法? 提前谢谢!
答案 0 :(得分:1)
阅读Apple Docs
特别是清单1,其中代码为if (theConnection)
答案 1 :(得分:0)
使用NSPredicate
这是过度的,并不是它的目的。您应该使用NSRegularExpression
进行正则表达式匹配。但是,至少可以说,使用单个正则表达式完全验证IP地址会很麻烦。
答案 2 :(得分: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];
祝你好运