【问题标题】:NSPredicate with regex to check alphanumericNSPredicate 与正则表达式检查字母数字
【发布时间】:2023-03-29 21:27:01
【问题描述】:

我想在 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 确实是您所期望的。还要检查任何空格,因为它会破坏匹配。

标签: objective-c regex nspredicate


【解决方案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
    }
    

    【讨论】:

    • 很高兴看到您重新开始营业。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2014-05-24
    相关资源
    最近更新 更多