Skip to content

Instantly share code, notes, and snippets.

@rahulbagal
Created April 26, 2019 11:53
Show Gist options
  • Save rahulbagal/4a06a997497e6f921663b69e5286d859 to your computer and use it in GitHub Desktop.
Save rahulbagal/4a06a997497e6f921663b69e5286d859 to your computer and use it in GitHub Desktop.
Dart : How to check if password contains all required characters
# Dart: Validate Password
This code snippet shows how to validate a password
**Requirement** :
Password should be more than 8 characters long
It should contain
at least one Uppercase ( Capital ) letter
at least one lowercase character
at least digit and
special character.
void main() {
var p = "ComplextPassword@123";
//will print True if password is complient else false
print(isPasswordCompliant(p));
}
// Password validation function
bool isPasswordCompliant(String password)
{
bool isComplient = false;
bool hasUppercase = false;
bool hasDigits = false;
bool hasLowercase = false;
bool hasSpecialCharacters = false;
var character='';
var i=0;
print(password);
if (! password?.isEmpty) {
// Check if valid special characters are present
hasSpecialCharacters = password.contains(new RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
while (i < password.length){
character = password.substring(i,i+1);
print(character);
if (isDigit(character , 0)){
hasDigits=true;
}else{
if (character == character.toUpperCase()) {
hasUppercase=true;
}
if (character == character.toLowerCase()){
hasLowercase=true;
}
}
i++;
}
}
isComplient = hasDigits & hasUppercase & hasLowercase & hasSpecialCharacters;
return isComplient;
}
bool isDigit(String s, int idx) =>
"0".compareTo(s[idx]) <= 0 && "9".compareTo(s[idx]) >= 0;
@selcukguvel
Copy link

selcukguvel commented Oct 3, 2020

bool isPasswordCompliant(String password, [int minLength = 6]) {
  if (password == null || password.isEmpty) {
    return false;
  }

  bool hasUppercase = password.contains(new RegExp(r'[A-Z]'));
  bool hasDigits = password.contains(new RegExp(r'[0-9]'));
  bool hasLowercase = password.contains(new RegExp(r'[a-z]'));
  bool hasSpecialCharacters = password.contains(new RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
  bool hasMinLength = password.length > minLength;

  return hasDigits & hasUppercase & hasLowercase & hasSpecialCharacters & hasMinLength;
}

It should be bool hasMinLength = password.length >= minLength;

@apoorvpandey
Copy link

bool isPasswordCompliant(String password, [int minLength = 6]) {
  if (password == null || password.isEmpty) {
    return false;
  }

  bool hasUppercase = password.contains(new RegExp(r'[A-Z]'));
  bool hasDigits = password.contains(new RegExp(r'[0-9]'));
  bool hasLowercase = password.contains(new RegExp(r'[a-z]'));
  bool hasSpecialCharacters = password.contains(new RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
  bool hasMinLength = password.length > minLength;

  return hasDigits & hasUppercase & hasLowercase & hasSpecialCharacters & hasMinLength;
}

Superb! Thanks a lot

@musheyev
Copy link

This is great! My 5 cents:

bool isPasswordCompliant(String password, [int minLength = 8]) {
  if (password == null || password.length < minLength) {
    return false;
  }

  bool hasUppercase = password.contains(RegExp(r'[A-Z]'));
  if (hasUppercase) {
    bool hasDigits = password.contains(RegExp(r'[0-9]'));
    if (hasDigits) {
      bool hasLowercase = password.contains(RegExp(r'[a-z]'));
      if (hasLowercase) {
        bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
        return hasSpecialCharacters;
      }
    }
  }

  return false;
}

@Rakhmen
Copy link

Rakhmen commented Apr 20, 2021

Clear and succinct ;)

  bool isPasswordValid(String password) {
    if (password.length < 8) return false;
    if (!password.contains(RegExp(r"[a-z]"))) return false;
    if (!password.contains(RegExp(r"[A-Z]"))) return false;
    if (!password.contains(RegExp(r"[0-9]"))) return false;
    if (!password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]'))) return false;
    return true;
  }

This uses the fail fast pattern which doesn't even waste time trying to compute the longer validations if one of the previous ones is false already ^^

@musheyev
Copy link

Nice!

@bharathraj-e
Copy link

+1

@Rohit7602
Copy link

main(List args) {
var newtype = NewPassword("Rohit@123");
print(newtype);
}

NewPassword(String Password, [Length = 8]) {
if (Password.length >= Length &&
Password.contains(RegExp('[A-Z]')) &&
Password.contains(RegExp('[a-z]')) &&
Password.contains(RegExp('[0-9]')) &&
Password.contains(RegExp('[!@#%^&*(),.?":{}|<>]'))) {
return true;
} else {
return false;
}
}

@erickximenes
Copy link

validator: (value) {
if (value.lenght > 8){
return "A senha deve ter no mínimo 8 caracteres";
}
if (!RegExp(r'^(?=.?[A-Z])(?=.?[a-z])(?=.?[0-9])(?=.?[!@#$&*~]).{8,}$')
.hasMatch(value)) {
return "A senha deve conter caracteres especias, maiúsculas, minúsculas e números)";
}
return null;
},

@aquadesk
Copy link

what about a single quote?

@rizwan992323
Copy link

good

@devOmedia
Copy link

This works as as I expected to.

@Johnvinith
Copy link

Johnvinith commented Jan 31, 2023

RegExp(r"^(?=.[a-z])(?=.[A-Z])(?=.*\d)[a-zA-Z\d\w\W]{8,}$")

all in one

min 8
uppercase
lowercase
special charecter
number

code can be

if(password.containes(RegExp(r"^(?=.[a-z])(?=.[A-Z])(?=.*\d)[a-zA-Z\d\w\W]{8,}$")))
{
// valid
} else
{
// not valid
}

@rahulbagal
Copy link
Author

I asked ChatGPT to do this again

Question:
Write a c# code to validate password with the following requirements
Password should be more than 8 characters long
It should contain
at least one Uppercase ( Capital ) letter
at least one lowercase character
at least digit and
special character.

Here is what chatGPT answered

Here is a sample code to validate password in C# using a regular expression pattern:

using System;
using System.Text.RegularExpressions;

namespace PasswordValidation
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsPasswordValid("Password123#"));
            Console.WriteLine(IsPasswordValid("password123#"));
            Console.WriteLine(IsPasswordValid("PASSWORD123#"));
            Console.WriteLine(IsPasswordValid("Password123"));
            Console.WriteLine(IsPasswordValid("password123"));
        }

        static bool IsPasswordValid(string password)
        {
            string pattern = @"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[^\w\d\s]).{8,}$";
            Regex regex = new Regex(pattern);
            return regex.IsMatch(password);
        }
    }
}

This code uses a regular expression pattern ^(?=.[A-Z])(?=.[a-z])(?=.\d)(?=.[^\w\d\s]).{8,}$ to check for the required conditions:

(?=.[A-Z]) checks for at least one uppercase letter
(?=.
[a-z]) checks for at least one lowercase letter
(?=.\d) checks for at least one digit
(?=.
[^\w\d\s]) checks for at least one special character
.{8,} checks for a minimum length of 8 characters.
The function IsPasswordValid uses the Regex.IsMatch method to check if the password string matches the pattern.

@debojyoti452
Copy link

extension method:

extension ValidatorExt on String {
  // isEmail validator
  bool get isEmail {
    final emailRegex = RegExp(
        r'^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+');
    return emailRegex.hasMatch(this);
  }

  // password validator for 8 characters, 1 uppercase, 1 lowercase, 1 number, 1 special character
  bool get isPasswordCompliant {
    String password = this;
    bool hasUppercase = password.contains(RegExp(r'[A-Z]'));
    bool hasLowercase = password.contains(RegExp(r'[a-z]'));
    bool hasDigits = password.contains(RegExp(r'[0-9]'));
    bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
    bool hasMinLength = password.length > 8;

    return hasUppercase && hasLowercase && hasDigits && hasSpecialCharacters && hasMinLength;
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment