【问题标题】:Alphanumeric Validation for password fields in iOS [duplicate]iOS中密码字段的字母数字验证[重复]
【发布时间】:2016-02-02 00:36:33
【问题描述】:

在我的 iOS 项目中,我想验证密码,我应该接受严格的字母数字密码,即密码必须同时包含字母和数字,我通过以下方法完成了此操作,但它以数字为可选的,看起来很简单,但它占用了我的时间,请帮助我

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

        if([matches count] > 0)
        {
            // Valid input
            return true;
        }
        else
        {
            return false;
        }

【问题讨论】:

    标签: ios objective-c iphone regex nsregularexpression


    【解决方案1】:

    你的代码看起来不错,你应该试试这个模式:

    ^(?=.*[a-z])(?=.*\d)[a-z\d]*$
    

    确保输入包含至少一个字母和至少一个数字,并且只接受字母数字组合。

    Regex Demo

    示例代码:

    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(?=.*[a-z])(?=.*\\d)[a-z\\d]*$"
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    NSArray *matches = [regex matchesInString:input
                                      options:0
                                        range:NSMakeRange(0, [input length])];
    
    if([matches count] > 0)
    {
        // Valid input
        return true;
    }
    else
    {
        return false;
    }
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      你可以做到的。

      NSString *pass= @"hRj4fg2";
      NSString    *regex     = @"^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]*$";//@"^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]*$";//Both will work
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
      BOOL isValidPassword = [predicate evaluateWithObject:pass];
      NSLog(@"isValidPassword:%d",isValidPassword);
      

      结果:

      hRj4fg2* 无效

      hRj4fg2 有效

      shkdskd 无效

      1234545 无效

      jam56h&jk 无效

      【讨论】:

      • 您还需要检查大写/小写字母
      【解决方案3】:

      使用NSCharacterSet 代替正则表达式,

          private func containsOnlyNumbers(number:String)-> Bool
          {
              let numberCharSet = NSCharacterSet(charactersInString: "0123456789")
              let stringAfterRemovingNumbers = number.stringByTrimmingCharactersInSet(numberCharSet)
              return (stringAfterRemovingNumbers.characters.count==0)//string contains only numbers if it has zero charecters after removing numbers from it
          }
      

      【讨论】:

      • OP 希望允许数字字母。
      • @oarfish :他可以对字母字符重复相同的步骤以确保字符串包含两者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多