Skip to content
Password Validator & Strength Evaluator
Swift Ruby Objective-C
Branch: master
Clone or download
Latest commit 477899b Jun 13, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Demo Update demo project Dec 13, 2017
Navajo.xcodeproj Set @objc inference to default Dec 13, 2017
Source Fix "open static" problem in Swift 5 May 20, 2019
Tests Update website url Dec 13, 2017
.gitignore Initial commit Sep 8, 2015
.swift-version Bump version to 2.0.0 Dec 13, 2017
.travis.yml Update versions Dec 13, 2017
LICENSE Update year range to include 2016 Mar 18, 2016
Navajo-Swift.podspec Bump version to 2.1.0 Jun 13, 2019
README.md Remove white lines Dec 13, 2017
wallpaper.png Reduce image size Dec 13, 2017

README.md

Navajo-Swift

Password Validator & Strength Evaluator

Navajo is named in honor of the famed code talkers of the Second World War.

Original Project

Navajo by Mattt Thompson

This project is not compatible with the original project.

Installation

Platform Swift 4.0 Travis-CI Carthage compatible Version

Carthage

github "jasonnam/Navajo-Swift"

CocoaPods

use_frameworks!
pod 'Navajo-Swift'
import Navajo_Swift

Manual

Just copy the files in Source folder into your project.

Usage

Evaluating Password Strength

Password strength is evaluated in terms of information entropy.

let password = passwordField.text ?? ""
let strength = Navajo.strength(ofPassword: password)

strengthLabel.text = Navajo.localizedString(forStrength: strength)

Validating Password

let lengthRule = LengthRule(min: 6, max: 24)
let uppercaseRule = RequiredCharacterRule(preset: .LowercaseCharacter)

validator = PasswordValidator(rules: [lengthRule, uppercaseRule])

if let failingRules = validator.validate(password) {
    validationLabel.textColor = .red
    validationLabel.text = failingRules.map({ return $0.localizedErrorDescription }).joined(separator: "\n")
} else {
    validationLabel.textColor = .green
    validationLabel.text = "Valid"
}

Available Validation Rules

  • Allowed Characters
  • Required Characters (custom, lowercase, uppercase, decimal, symbol)
  • Non-Dictionary Word
  • Minimum / Maximum Length
  • Predicate Match
  • Regular Expression Match
  • Block Evaluation

If you are using the Predicate and Regex rules, remember that when password is matching to them it is considered to be invalid. For example, we can check if users are using for example "password123" as their password by following rule object.

let rule = PredicateRule(predicate: NSPredicate(format: "SELF BEGINSWITH %@", "PASSWORD"))

For the block rule, it is considered to be invalid when the block returns true.

Localization

Keys for the localizable strings Localization Tutorial or check the demo app in the repository.

Password Strength

  • NAVAJO_VERY_WEAK
  • NAVAJO_WEAK
  • NAVAJO_REASONABLE
  • NAVAJO_STRONG
  • NAVAJO_VERY_STRONG

Password Validation

  • NAVAJO_ALLOWED_CHARACTER_ERROR
  • NAVAJO_REQUIRED_CHARACTER_REQUIRED_ERROR
  • NAVAJO_REQUIRED_CHARACTER_LOWERCASE_ERROR
  • NAVAJO_REQUIRED_CHARACTER_UPPERCASE_ERROR
  • NAVAJO_REQUIRED_CHARACTER_DECIMAL_DIGIT_ERROR
  • NAVAJO_REQUIRED_CHARACTER_SYMBOL_ERROR
  • NAVAJO_DICTIONARYWORD_ERROR
  • NAVAJO_LENGTH_ERROR
  • NAVAJO_PREDICATE_ERROR
  • NAVAJO_REGEX_ERROR
  • NAVAJO_BLOCK_ERROR

Contact

Any feedback and pull requests are welcome :)

Jason Nam
Website
Email

License

Navajo-Swift is available under the MIT license. See the LICENSE file for more info.

You can’t perform that action at this time.