复杂的正则表达式密码检查

时间:2014-05-12 07:37:45

标签: objective-c regex

我对我的电子邮件参数进行了正则表达式检查,我还要为密码参数实现正则表达式检查。

对于我的电子邮件帐户,我会这样做:

- (BOOL)isValidEmailAddress:(NSString*)emailAddressToCheck
{
    BOOL stricterFilter = YES;
    NSString *stricterFilterString = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSString *laxString = @".+@.+\\.[A-Za-z]{2}[A-Za-z]*";
    NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:emailAddressToCheck];
}

但我想知道如何才能进行密码参数检查:

  1. 我想要实现的是不允许重复字符超过3次的密码。
  2. 例如,不允许
  3. 1,2,3或3,2,1。
  4. 字母和数字。
  5. 任何想法我该怎么做?

1 个答案:

答案 0 :(得分:3)

Idan,作为一个正则表达式的爱好者,我真的不想说正则表达式是不可能的。但是,我并不认为您指定的任务对于正则表达式来说是一项很好的任务。没错,有人可以想象找到一种破解解决方案的方法,我之前已被吹走了。话虽如此,我从未见过下面第2点的解决方案。

  1. 例如,要检查每个字符(例如a)在字符串中出现的次数少于3次,这是非常具有挑战性的,并且可能涉及无限宽度的环视,仅在.NET中可用< / p>

  2. 在检查abc123987

  3. 等随机序列时,正则表达式毫无用处
  4. 我确定你知道,3号不是问题。在unicode环境中,\d可以代表阿拉伯数字,最好坚持使用特定字符类,例如[a-z0-9]不区分大小写模式。

  5. 我会为每个标准制作单独的方法,忘记正则表达式,当然除了作为简单条件的预过滤器。