我使用此功能检查URL是否有效。它适用于大多数情况,但这里返回的以下URL不是有效的!
http://www.iphonedevsdk.com/forum/iphone-sdk-development/11841-stringbytrimmingcharactersinset.html
如何改进我的函数的正则表达式,它将覆盖所有的URL类型?
- (BOOL) urlIsValiad: (NSString *) url
{
NSString *regex =
@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *regextest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if ([regextest evaluateWithObject: url] == YES) {
NSLog(@"URL is valid!");
} else {
NSLog(@"URL is not valid!");
}
return [regextest evaluateWithObject:url];
}
答案 0 :(得分:2)
这将是我的尝试:
((?:http|https)://)?(?:www\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?
EDIT
在反向引用(?<=/)
中添加了额外的特异性
编辑2 在网址中添加了国家/地区名称的可选搜索(例如www.google.com.in)
答案 1 :(得分:1)
尝试使用以下内容更改* regex =行。
NSString * regex =“(http | ftp | https):// [\ w-_] +(。[\ w-_] +)+([\ w - 。,@?^ = %&amp;:/〜+#] * [\ w - \ @?^ =%&amp; /〜+#])?“
答案 2 :(得分:0)
好吧,我在微软网站上发现了一些内容,并且稍有改动,这是迄今为止最好的表达方式:
@"(?:[A-Za-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%\\&'*+/=?\\^_`{|}"
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-"
@"z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:25[0-5"
@"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
@"9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
答案 3 :(得分:0)
旧线程,但我认为我的修改可能对其他人登陆此处有所帮助:
我不想只检查“www”作为主机名,现在我们可能会遇到不同的主机名...因此我扩展了正则表达式:
"((?:http|https)://)?(?:[A-Za-z0-9]{1,25}\\.)?[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?"
答案 4 :(得分:0)
-(BOOL)validateUrl{
// NSString *urlRegEx = @"((?:http|https)://)?(www\\.)[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
NSString *urlRegEx = @"((?:http|https)://)?(www\\.)[\\w\\d\\-_]+\\.\\w{2,3}(\\.\\w{2})?(/(?<=/)(?:[\\w\\d\\-./_]+)?)?";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
if ([urlTest evaluateWithObject: self] == YES) {
NSLog(@"URL is valid!");
} else {
NSLog(@"URL is not valid!");
}
return [urlTest evaluateWithObject:self];
}