我发现了一个用于检测Web URL的PHP正则表达式:
$url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/';
此正则表达式可以匹配以下网址:
http://www.google.com
www.google.com
google.com
现在,我尝试在 Objective-C 中使用它:
NSString * expression = @"/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/";
NSRegularExpression * regularExp = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil];
NSInteger numberOfMatches = [regularExp numberOfMatchesInString:@"www.google.com" options:0 range:NSMakeRange(0, URLString.length)];
if (numberOfMatches >= 1)
{
return @"webURL";
}
else
{
return @"searchEngine";
}
它没有检测到任何类型的URL。我在regexr.com进行了测试。
答案 0 :(得分:0)
检查一下:
NSString urlRegEx = @“(http | https)://((\ w) |([0-9] )|([ - | _]))+(\ | /)+“;
我在我的应用中使用这个
答案 1 :(得分:0)
请尝试使用以下代码验证网址
- (BOOL) validateUrl: (NSString *) stringURL {
NSString *urlRegEx =
@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
return [urlTest evaluateWithObject:stringURL];
}
答案 2 :(得分:0)
您应该记住,PHP正则表达式通常在目标C中使用此类正则表达式模式时应删除的分隔符中使用。此外,我们不必转义字符类中的每个非单词字符(仅限于连字符),但在字符类之外,必须双重转义特殊字符。
所以,使用
NSString *pattern = @"(?:(?:http|https)://)?[a-zA-Z0-9./?:@\\-_=#]+\\.([a-zA-Z0-9./?:@\\-_=#])*";
或者,你甚至可以签约
NSString *pattern = @"(?:(?:http|https)://)?[\\w./?:@=#-]+\\.([\\w./?:@=#-])*";
查看字符类末尾的连字符不需要转义。