Mol0ko
Mol0ko

Reputation: 3298

How to check if string contains both uppercase and lowercase characters

I need to validate password entered by user and check if the password contains at least one uppercase and one lowercase char in Dart.

I wrote this String extension:

extension StringValidators on String {
  bool containsUppercase() {
    // What code should be here?
  }

  bool containsLowercase() {
    // What code should be here?
  }
}

And use it like this:

final text = passwordTextController.text;
final isValid = text.containsUppercase() && text.containsLowercase();

Is there any regexp for this purpose? Or it should be plain algorithm? Please help me to find out the elegant way. Thanks!

Upvotes: 2

Views: 13582

Answers (4)

Jamirul islam
Jamirul islam

Reputation: 866

void main() {
  solve("coDE");
}

String solve(String s) {
  // your code here
  List _a = s.split("");
  String _b = "";
  List _x = [];
  List _y = [];
  for(var i in _a){
    if(i.toString() == i.toString().toUpperCase()){
      _x.add(i);
    }else{
      _y.add(i);
    }
  }
  
  if(_x.length == _y.length){
    _b = _a.join().toLowerCase();
  }else if(_x.length > _y.length){
     _b = _a.join().toUpperCase();
  }else if(_x.length < _y.length){
     _b = _a.join().toLowerCase();
  }
  return "$_b";
}

OR 

String solve2(String str) {
  return RegExp(r'[A-Z]').allMatches(str).length >
          RegExp(r'[a-z]').allMatches(str).length
      ? str.toUpperCase()
      : str.toLowerCase();
}

Upvotes: 1

Uchenna Iheanacho
Uchenna Iheanacho

Reputation: 166

extension StringValidators on String {
  bool get containsUppercase => contains(RegExp(r'[A-Z]'));
  bool get containsLowercase => contains(RegExp(r'[a-z]'));
}

Upvotes: 11

daddygames
daddygames

Reputation: 1928

For only minimum 1 upper and minimum 1 Lower only, you could use this RegEx:

RegExp regEx = new RegExp(r"(?=.*[a-z])(?=.*[A-Z])\w+");
String a = "aBc";
String b = "abc";
String c = "ABC";
print("a => " + regEx.hasMatch(a).toString());
print("b => " + regEx.hasMatch(b).toString());
print("c => " + regEx.hasMatch(c).toString());

Expected Result:

I/flutter (10220): a => true
I/flutter (10220): b => false
I/flutter (10220): c => false

Reusable

extension StringValidators on String {

  meetsPasswordRequirements() {
    RegExp regEx = new RegExp(r"(?=.*[a-z])(?=.*[A-Z])\w+");
    return regEx.hasMatch(this);
  }

}

Use

final isValid = text.meetsPasswordRequirements();

Upvotes: 2

S4nj33v
S4nj33v

Reputation: 459

  • Minimum 1 Upper case,
  • Minimum 1 lowercase,
  • Minimum 1 Numeric Number,
  • Minimum 1 Special Character,
  • Common Allow Character ( ! @ # $ & * ~ )
bool validateStructure(String value){
        String  pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$';
        RegExp regExp = new RegExp(pattern);
        return regExp.hasMatch(value);
  }

Upvotes: 12

Related Questions