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

how to check if string contains arabic character

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

我尝试了 this 所有答案,但没有任何效果。

谁能告诉我应该使用什么正则表达式?


nickNameTF.text = @"eweسبيب";
NSLog(@"nickNameTF.textnickNameTF.text===%@", nickNameTF.text);
NSString *emailRegex = @"\p{Arabic}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];


if ([emailTest evaluateWithObject:nickNameTF.text]) {
    DTAlertView *myAl = [DTAlertView alertViewWithTitle:localize(@"myErr") message:localize(@"srNicc") delegate:nil cancelButtonTitle:localize(@"dismiss") positiveButtonTitle:nil];
    [myAl setDismissAnimationWhenButtonClicked:DTAlertViewAnimationSlideTop];
    [myAl showWithAnimation:DTAlertViewAnimationSlideBottom];

    nickNameTF.enabled = YES;
    nickNameTF.userInteractionEnabled = YES;

}

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");
}

NSPredicate

documentation之后,代码应该写成:

NSPredicate *emailTest =
    [NSPredicate predicateWithFormat: @"SELF MATCHES %@", @"'\\p{Arabic}'"];

您当前的代码缺少正则表达式两边的单引号。你还需要双重转义\,因为有两层转义:一层是Objective-C的字符串字面量语法,另一层是NSPredicate.

的字符串字面量语法。

由于要检查字符串是否包含阿拉伯字符,正则表达式应为

(?s).*\p{Arabic}.*

(?s) 是一个内联标志,它使 . 无一例外地匹配任何代码点。

将其插入上面的代码中:

NSPredicate *emailTest =
        [NSPredicate predicateWithFormat: @"SELF MATCHES %@", @"'(?s).*\\p{Arabic}.*'"];

predicate format string syntax中,只有MATCHES使用正则表达式,它断言整个字符串匹配正则表达式,所以正则表达式需要写成匹配整个字符串。

NS正则表达式

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

我在 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)"

使用扩展的便捷方式

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")
}