Objective-C上的Web正则表达式验证
我有一些用于表单字段验证的正则表达式 我有一个单元测试来定义预期的结果Objective-C上的Web正则表达式验证,objective-c,regex,Objective C,Regex,我有一些用于表单字段验证的正则表达式 我有一个单元测试来定义预期的结果 NSArray *suiteWebs = [NSArray arrayWithObjects: @"http://webapp.stackoverflow.net", @"http://webapp.stackoverflow.net/info.php", @"http://www.stacko
NSArray *suiteWebs = [NSArray arrayWithObjects:
@"http://webapp.stackoverflow.net",
@"http://webapp.stackoverflow.net/info.php",
@"http://www.stackoverflow.net",
@"http://www.stackoverflow.net/",
@"https://webapp.stackoverflow.net",
@"https://webapp.stackoverflow.net/info.php",
@"https://www.stackoverflow.net",
@"https://www.stackoverflow.net/"
@"webapp.stackoverflow.net",
@"webapp.stackoverflow.net/info.php",
@"www.stackoverflow.net",
@"www.stackoverflow.net/",
@"www.stack-overflow.com",
@"www.stackoverflow_.com",
@"www.stackover_flow.com",
nil];
NSArray *falseSuiteWebs = [NSArray arrayWithObjects:
@"ftp://webapp.stackoverflow.net",
@"http:/www.stackoverflow.net",
@"ftps://webapp.stackoverflow.net",
@"https:/www.stackoverflow.net",
nil];
for (NSString *web in suiteWebs) {
NSLog(@"Validating web %@", web);
STAssertTrue([TSAddEntityForm validateWeb:web withPatter:currentRegex], [NSString stringWithFormat:@"currentRegex web %@", web]);
}
for (NSString *web in falseSuiteWebs) {
NSLog(@"Validating web %@", web);
STAssertFalse([TSAddEntityForm validateWeb:web withPatter:currentRegex], [NSString stringWithFormat:@"currentRegex web %@", web]);
}
我的实际正则表达式是下一个:
NSString *webRegex4 = @"((http|https)://){0,1}((\\w)*|([0-9]*)|([\\-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([\\-|_])*))+";
我的问题是带有的域-我的正则表达式不验证它。例如,url www.stack-overflow.com被拒绝
有什么建议吗
谢谢您可能这个regexp在您的情况下会更好(它并不理想,但适用于以上合适和不好的示例): 它可以从http://或https://开始
[\w-]+(\.[\w-]+)*\。\w{2,6}
-描述域
[/\w.-]*
-文件夹和文档对于您的情况,此regexp可能会更好(它并不理想,但适用于上述合适和不好的示例):
它可以从http://或https://开始
[\w-]+(\.[\w-]+)*\。\w{2,6}
-描述域
文件夹和文档一般来说,复杂正则表达式是傻瓜的黄金。对多个正则表达式使用多个过程。独立验证URL的组件 复杂的正则表达式可能非常强大,但也可能让您陷入一个脆弱的角落,比如URL 此外,如果您使用的是Objective-C,那么使用NSURL提供的一些工具很容易将问题分解。 NSURL还可以让您很好地了解应该查看URL的哪些组件。 通过使用NSURL方法提取URL的组件,您可以更仔细地将正则表达式应用于每个组件
CFURL同样强大。一般来说,复杂正则表达式是傻瓜的黄金。对多个正则表达式使用多个过程。独立验证URL的组件 复杂的正则表达式可能非常强大,但也可能让您陷入一个脆弱的角落,比如URL 此外,如果您使用的是Objective-C,那么使用NSURL提供的一些工具很容易将问题分解。 NSURL还可以让您很好地了解应该查看URL的哪些组件。 通过使用NSURL方法提取URL的组件,您可以更仔细地将正则表达式应用于每个组件
CFURL同样强大。是的,这是一个很好的观点。但我更喜欢找到复杂的正则表达式,以便在我们拥有的不同平台上具有相同的验证模式。谢谢您仍然可以将其分解为组件,并在多个平台上处理它们。这似乎更像是一个正则表达式问题,而不是一个客观C问题。是的,这是一个很好的观点。但我更喜欢找到复杂的正则表达式,以便在我们拥有的不同平台上具有相同的验证模式。谢谢您仍然可以将其分解为组件,并在多个平台上处理它们。这似乎更像是一个正则表达式问题,而不是一个Objective-C问题。谢谢!!这正是我们需要的。谢谢!!这正是我们需要的。
(http(s)?://)?[\w-]+(\.[\w-]+)*\.\w{2,6}[/\w.-]*