我正在尝试在文本视图中检测文本是否包含超出十六进制值\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
。
在我看来,它应该具有与此模式相反的正则表达式,但我不知道它是什么。欢迎任何建议,谢谢。
答案 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
...
}