如何检查字符串是否包含阿拉伯字符

时间:2015-07-16 10:32:38

标签: ios objective-c regex arabic

我想检查字符串是否包含阿拉伯语文本。

我尝试了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"

3 个答案:

答案 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)

NSPredicate

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

或者,您可以在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")
}