Objective-C:超出十六进制值模式的正则表达式

时间:2011-11-24 11:51:43

标签: objective-c ios regex

我正在尝试在文本视图中检测文本是否包含超出十六进制值\u00 - \u7f模式的任何内容,然后执行某些操作。请看一下这段代码:

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[\x00-\x7f]"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:textView.text
                                                     options:0 
                                                       range:NSMakeRange(0, [textView.text length])];

if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0)))
{
    // do statement 1
}
else
{
    // do statement 2
}

从上面看,如果文字视图同时包含[\u00 - \u7f]内外的文字,那么这将do statement 1,但我想要的是do statement 2

在我看来,它应该具有与此模式相反的正则表达式,但我不知道它是什么。欢迎任何建议,谢谢。

1 个答案:

答案 0 :(得分:1)

克拉('^')否定了一个字符类,因此[^\u00-\u7f]将匹配除'\ u00'到'\ u7f'范围内的任何字符。

您还可以使用rangeOfCharacterFromSet:canBeConvertedToEncoding:来检查字符串是否包含任何非ASCII字符。

rangeOfCharacterFromSet:

NSRange ASCIIRange = NSMakeRange(0, 0x80);
NSCharacterSet *nonASCIICharSet = [[NSCharacterSet characterSetWithRange:ASCIIRange] invertedSet];
NSRange nonASCIIChars = [textView.text rangeOfCharacterFromSet:nonASCIICharSet];

if (nonASCIIChars.location == NSNotFound) {
    ...
} else {
    // textView.text contains non-ASCII characters
    ...
}

canBeConvertedToEncoding:

if ([textView.text canBeConvertedToEncoding:NSASCIIStringEncoding]) {
    ...
} else {
    // textView.text contains non-ASCII characters
    ...
}