我试图检测文本视图中的文本是否包含十六进制值\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

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

最佳答案

克拉('^')否定了字符类,因此[^\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
    ...
}

10-08 07:29