Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查Objective-C字符串中的特定字符_Ios_Objective C_Xcode5_Illegal Characters - Fatal编程技术网

Ios 检查Objective-C字符串中的特定字符

Ios 检查Objective-C字符串中的特定字符,ios,objective-c,xcode5,illegal-characters,Ios,Objective C,Xcode5,Illegal Characters,对于我正在使用的应用程序,我需要检查文本字段是否只包含字母a、T、C或G。此外,我希望为任何其他输入的字符生成专门的错误消息。例如,“不要在空格中加空格”或“字母b不是一个可接受的值”。我读过几篇类似的文章,但它们是字母数字的,我只需要指定的字符。请查看NSRegularExpression类参考 访问:像这样使用NSRegulareExpression NSString *str = @"your input string"; NSRegularExpression *regEx = [NSR

对于我正在使用的应用程序,我需要检查文本字段是否只包含字母a、T、C或G。此外,我希望为任何其他输入的字符生成专门的错误消息。例如,“不要在空格中加空格”或“字母b不是一个可接受的值”。我读过几篇类似的文章,但它们是字母数字的,我只需要指定的字符。

请查看NSRegularExpression类参考


访问:

像这样使用NSRegulareExpression

NSString *str = @"your input string";
NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:@"A|T|C|G" options:0 error:nil];
NSArray *matches = [regEx matchesInString:str options:0 range:NSMakeRange(0, str.length)];
for (NSTextCheckingResult *result in matches) {
    NSLog(@"%@", [str substringWithRange:result.range]);
}

此外,对于选项参数,您必须在文档中查找以选择一个合适的参数

一种方法适合您,绝非独一无二:

NString
具有查找子字符串的方法,子字符串表示为位置和偏移量的
NSRange
,由给定
NSCharacterSet
中的字符组成

字符串中应包含的内容集:

NSCharacterSet *ATCG = [NSCharacterSet characterSetWithCharactersInString:@"ATCG"];
还有一套不应该做的事情:

NSCharacterSet *invalidChars = [ATCG invertedSet];
您现在可以搜索由
无效字符组成的任意字符范围

NSString *target; // the string you wish to check
NSRange searchRange = NSMakeRange(0, target.length); // search the whole string
NSRange foundRange = [target rangeOfCharacterFromSet:invalidChars
                                             options:0 // look in docs for other possible values
                                               range:searchRange];
如果没有无效字符,则
foundRange.location
将等于
NSNotFound
,否则您将更改并检查
foundRange
中的字符范围,并生成专门的错误消息

重复此过程,根据
foundRange
更新
searchRange
,以查找所有无效字符

您可以将找到的无效字符累积到一个集合中(可能是
NSMutableSet
),并在最后生成错误消息

也可以使用正则表达式,请参见
NSRegularExpressions

等等

附录

有一个非常简单的方法来解决这个问题,但我没有给出,因为您给我的信表明您可能正在处理非常长的字符串,使用上面提供的方法可能是一个值得的胜利。不过,在你发表评论后,我再考虑一下,也许我应该包括:

NSString *target; // the string you wish to check
NSUInteger length = target.length; // number of characters
BOOL foundInvalidCharacter = NO;   // set in the loop if there is an invalid char

for(NSUInteger ix = 0; ix < length; ix++)
{
   unichar nextChar = [target characterAtIndex:ix]; // get the next character

   switch (nextChar)
   {
      case 'A':
      case 'C':
      case 'G':
      case 'T':
         // character is valid - skip
         break;

      default:
         // character is invalid
         // produce error message, the character 'nextChar' at index 'ix' is invalid
         // record you've found an error
         foundInvalidCharacter = YES;
   }
}

// test foundInvalidCharacter and proceed based on it
NSString*目标;//要检查的字符串
NSU整数长度=target.length;//字符数
BOOL foundInvalidCharacter=NO;//如果存在无效字符,则在循环中设置
对于(整数ix=0;ix

HTH

for循环到底在做什么?上面的方法返回字符串中的所有匹配项,因此您必须循环它们并分别提取每个匹配项。此外,我注意到我没有提供模式!如果要匹配A、T、C或G,请使用@“A|T|C|G”作为模式。如何检查字符范围?正如您所知,我仍在尝试学习所有这些objective-C内容,其中有很多。同样有很多方法,但在最简单的级别上,有
characterAtIndex:
方法,该方法位于
NSString
——范围为您提供了起始索引和长度,因此简单的循环可以依次检查每个字符。还有一些方法可以将范围作为
NSString
等提供给您。请阅读
NSString
,可能还有
NSMutableSet
,文档页面。