如何检查字符串是否包含阿拉伯字符
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")
}
我想检查字符串是否包含阿拉伯文本。
我尝试了 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")
}