我有一个带有一些括号和连字符的NSString(电话号码),因为某些电话号码已格式化.如何从字符串中删除除数字之外的所有字符?
我的电话号码格式是(987)786-5645.
- (BOOL)validatePhoneNumberWithString:(NSString*)phone
{
NSString *pNRegex = @"[(0-9)]{3}+\\ +\\[0-9-]{3}+\\[0-9]{4}";
NSPredicate *PNTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pNRegex];
return [PNTest evaluateWithObject:phone];
}
Run Code Online (Sandbox Code Playgroud)
我正在使用上面的代码.
这应该是什么样的正则规则?我能够弄清楚数字和括号.
关闭括号后我应该用什么来检测空格?
是否可以从字符串中提取数字.例如,我有一个字符串:
my name is shishir and my number is 98890876478
Run Code Online (Sandbox Code Playgroud)
我可以98890876478从上面的字符串中提取吗?
或者如果我的字符串是:
my name is shishir and my number is XXX98890876478XXX
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以提取"98890876478",它位于XXX之间.
是否有可能做到这一点?
我从服务器收到一条消息,该消息应该是上面的格式,我需要数值才能进一步操作
这是我正在尝试使用的代码:
NSString *logString = [NSString stringWithFormat:@"%@",theXML];
NSString *digits = [logString stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"Message id: %i", [digits intValue]);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
2010-05-21 16:37:07.092 sms[5311:207] OK: message-ID XXX110103468XXX
2010-05-21 16:37:07.851 sms[5311:207] Message id: 2
Run Code Online (Sandbox Code Playgroud)
我认为它返回两个因为size == 2.我需要检索"XXX"之间的值.
我是Objective-C的新手,但在其他更高级的语言方面经验丰富.我想通过删除所有非数字字符来规范化字符串.换句话说,给定输入字符串"206-555-1212",归一化结果应为"2065551212".下面的代码片段有效,但鉴于我在其他语言中的经验似乎有点矫枉过正.有没有更好的方法呢?
编辑:输入字符串"(206)555-1212","206.555.1212","206 555 1212"等也应返回相同的标准化结果.
NSString * normalize(NSString * number)
{
NSString *normalizedNumber = @"";
NSString *tmpString = nil;
NSRange searchRange;
NSRange resultRange;
searchRange.location = 0;
searchRange.length = number.length;
while (0 < searchRange.length)
{
resultRange = [number rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]
options:NSLiteralSearch
range:searchRange];
tmpString = [number substringWithRange:resultRange];
normalizedNumber = [normalizedNumber stringByAppendingString:tmpString];
searchRange.location = resultRange.location + resultRange.length;
searchRange.length = number.length - searchRange.location;
}
return normalizedNumber;
}
Run Code Online (Sandbox Code Playgroud) 我有一个电话号码的字符串
mynumber = @"(334)687-6619";
我在用
NSString *phoneURLString = [NSString stringWithFormat:@"tel:%@", phoneNumber];
NSURL *phoneURL = [NSURL URLWithString:phoneURLString];
[[UIApplication sharedApplication] openURL:phoneURL];
Run Code Online (Sandbox Code Playgroud)
拨打电话.但由于"(",")"我的方法无法拨打电话.
请建议我做一个正确的字符串
"1-800-555-1212"或类似的东西.
谢谢