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