我使用以下正则表达式:
NSString *reg1 = @"/[$|§|%|&|{|}|'|`|´|^|°|~]/i";
NSPredicate *messageTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",
reg1];
我测试字符串是否匹配此正则表达式:
if([messageTest evaluateWithObject:message] == NO){
messageValid = NO;
NSLog(@"message invalid");
}
因此,如果文本包含正则表达式中指定的任何字符,则文本无效。
这个正则表达式在javascript中为我工作。但是在objective-c中,无论字符串中包含哪些字符,我都会得到NO。
问题出在哪里?
答案 0 :(得分:4)
您的代码基本上存在两个问题。首先,你的正则表达式
NSString *reg1 = @"/[$|§|%|&|{|}|'|`|´|^|°|~]/i";
错了:
$
{
}
^
|
分隔字符类中的字符。您想要的ICU正则表达式是
[\$§%&\{\}'`´\^°~]
在你的程序中试试这个:
NSString *reg1 = @"[\\$§%&\\{\\}'`´\\^°~]";
(请注意,\
字符在Objective-C字符串中表示为\\
。)
其次,你正在测试
if([messageTest evaluateWithObject:message] == NO)
检查邮件是否无效。但-evaluateWithObject:
返回NO
表示不是匹配,因此字符串不包含任何字符,因此字符串 有效。你需要改变它的相反,即:
if([messageTest evaluateWithObject:message])
表示 匹配,因此该字符串至少包含其中一个字符,因此字符串不是有效。
答案 1 :(得分:1)
|
字符分开。字符类只能匹配一个字符,而char类只是一个字符可能的列表。 (见:Character classes)/
分隔符。我想这可能是你的主要问题。那说试试这可以纠正一些问题:
NSString *reg1 = @"[$§%&{}'`´^°~]";