当我尝试将字符串与正则表达式'^(34|37)'
匹配时,即使给出了正确的字符串,它也不起作用。任何人都可以指出或指导我做错了吗?
这是我的代码:
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^(34|37)"];
if([myTest evaluateWithObject: @"378282246310005"]){
NSLog(@"match");
}
答案 0 :(得分:1)
你的正则表达式与给定的字符串不匹配。那是^(34|37)
与378282246310005
不匹配。它匹配前两个字符,但之后失败,因为字符串包含更多字符,而正则表达式终止。
您需要更改正则表达式以匹配其余字符,即使您不想捕获它们。尝试将您的重复文本更改为^(34|37).*
。
答案 1 :(得分:0)
为什么不使用hasPrefix
:
if([@"378282246310005" hasPrefix:@"34"] || [@"378282246310005" hasPrefix:@"37"])
{
NSLog(@"found it");
}
修改强>
使用NSPredicate
:
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^3(4|7)\\d+$"];
if([myTest evaluateWithObject: @"378282246310005"])
{
NSLog(@"match");
}
else
{
NSLog(@"notmatch");
}
使用NSRegularExpression
:
NSError *error = nil;
NSString *testStr = @"348282246310005";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^3(4|7)" options:NSRegularExpressionCaseInsensitive error:&error];
NSInteger matches = [regex numberOfMatchesInString:testStr options:NSMatchingReportCompletion range:NSMakeRange(0, [testStr length])];
if(matches > 0 )//[myTest evaluateWithObject: @"378282246310005"])
{
NSLog(@"match");
}
else
{
NSLog(@"notmatch");
}
BTW:(34|37)
看起来不是34
或37
而是347
或337
,因为引擎会选择4|3
4
或3
。
答案 2 :(得分:0)
将正则表达式与bool类型匹配的单独方法。然后它会工作。
像这样- (IBAction)tapValidatePhone:(id)sender
{
if(![self validateMobileNo:self.txtPhoneNo.text] )
{
NSLog(@"Mobile No. is not valid");
}
}
-(BOOL) validateMobileNo:(NSString *) paramMobleNo
{
NSString *phoneNoRegex = @"^(34|37)";
NSPredicate *phoneNoTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneNoRegex];
return [phoneNoTest evaluateWithObject:@"3435"];
}
它不会进入其他条件。