NSPredicate 与正则表达式检查字母数字

Posted

技术标签:

【中文标题】NSPredicate 与正则表达式检查字母数字【英文标题】:NSPredicate with regex to check alphanumeric 【发布时间】:2013-07-10 09:36:49 【问题描述】:

我想在 Objective c 中使用正则表达式检查字符串。我的代码

NSString *regexAmazonOrder =@"[a-zA-Z0-9]*";
NSPredicate *predicateAmazonOrder = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regexAmazonOrder];

if([predicateAmazonOrder evaluateWithObject:cardNumber.text])

    NSLog(@"Its coming inside AMAZON ORDER EVALUATIONS");
    ...

但它不起作用。帮帮我。我知道它很简单,但吃我的心!!!谢谢

【问题讨论】:

什么似乎不起作用?如果您想使用正则表达式,请使用 NSRegularExpression 类。你试过了吗? 您的代码似乎可以工作...您能否提供一个对您来说失败的示例字符串? @Alladinian - femitestcard2013 @Meenu 好吧...刚刚测试过,它可以工作。您可以在评估之前添加断点或NSLog 语句,以检查cardNumber.text 确实是您所期望的。还要检查任何空格,因为它会破坏匹配。 【参考方案1】:

这里是较短的版本:

+(BOOL)isAlphanumericString:(NSString *)string

    NSString *filter = @"[a-z0-9]*";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", filter];
    return [predicate evaluateWithObject:string];

【讨论】:

【参考方案2】:

试试这样:(未经测试,只是给你一个开端)

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9]*"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
NSArray *matches = [regex matchesInString:cardNumber.text
                                  options:0
                                    range:NSMakeRange(0, [string length])];

if([matches count] > 0)

   // Valid input

【讨论】:

很高兴看到您重新开始营业。:)

以上是关于NSPredicate 与正则表达式检查字母数字的主要内容,如果未能解决你的问题,请参考以下文章

常用的正则表达式

常用数字字母组合正则表达式

用于检查字符串是不是严格字母数字的正则表达式

字母数字下划线常用正则表达式

CoreData NSPredicate MATCHES 正则表达式

iOS小技能:NSPredicate在正则表达式的应用下篇