我想检查字符串是否包含阿拉伯语文本。
我尝试了this所有答案,但没有任何效果。
有人可以告诉我应该使用正则表达式吗?
nickNameTF.text = @"يسيس";
// nickNameTF.text = @"adsيسيس";
// nickNameTF.text = @"ads";
NSLog(@"nickNameTF.textnickNameTF.text===%@", nickNameTF.text);
NSString *emailRegex = @"\\p{Arabic}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
if (![emailTest evaluateWithObject:nickNameTF.text]) {
NSLog(@"not trueeeee");
}
if ([emailTest evaluateWithObject:nickNameTF.text]) {
NSLog(@"trueeeee");
}
"value1","value2","value3","value4","value5","value6","value7"
答案 0 :(得分:8)
我在swift中写了@nhahtdh的答案:)
var str = "منص••"
var str2 = "منص"
var str3 = "Hello منص••"
let predicate = NSPredicate(format: "SELF MATCHES %@", "(?s).*\\p{Arabic}.*")
if predicate.evaluateWithObject(str3) {
print("arabic")
}
// if you need to Left to right flow
let addLTR = "\u{200E}\(str3)"
答案 1 :(得分:7)
在documentation之后,代码应写为:
NSPredicate *emailTest =
[NSPredicate predicateWithFormat: @"SELF MATCHES %@", @"'\\\\p{Arabic}'"];
您当前的代码缺少正则表达式周围的单引号。你还需要加倍转义\
,因为有2层转义:一个是Objective-C的字符串文字语法,另一个是NSPredicate的字符串文字语法。
由于您要检查字符串是否包含阿拉伯字符,因此正则表达式应为
(?s).*\p{Arabic}.*
(?s)
是一个内联标志,使.
无任何异常匹配任何代码点。
将其插入上面的代码:
NSPredicate *emailTest =
[NSPredicate predicateWithFormat: @"SELF MATCHES %@", @"'(?s).*\\\\p{Arabic}.*'"];
在predicate format string syntax中,只有MATCHES
与正则表达式一起工作,它断言整个字符串与正则表达式匹配,因此需要编写正则表达式以匹配整个字符串。
或者,您可以在NSRegularExpression中使用firstMatchInString:options:range:
。
在此方法中,您只需要在Objective-C字符串文字中转义一次。由于该方法将搜索匹配的子字符串,因此不必编写正则表达式以匹配整个字符串。
修改文档中的示例代码:
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\p{Arabic}"
options:0
error:&error];
NSTextCheckingResult *match = [regex firstMatchInString:nickNameTF.text
options:0
range:NSMakeRange(0, [nickNameTF.text length])];
if (match) {
// If there is an Arabic character
}
答案 2 :(得分:1)
使用扩展名的便捷方式
extension String {
var isArabic: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@", "(?s).*\\p{Arabic}.*")
return predicate.evaluate(with: self)
}
}
您可以只使用以下内容:
var str = "منص••"
if str.isArabic {
print("Arabic")
}