Created
April 25, 2024 01:43
-
-
Save kranfix/67f97448c167d470f26a366337b7ebcc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void main() { | |
final email1 = Email.maybeFrom("frank@moreno"); | |
final email2 = Email.maybeFrom("[email protected]"); | |
print(email1); | |
print(email2); | |
} | |
bool isValidEmail(String email) { | |
// Regular expression to validate the format of an email | |
RegExp regex = RegExp( | |
r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'); | |
return regex.hasMatch(email); | |
} | |
bool isValidPassword(String password) { | |
// Regular expressions for each criteria | |
RegExp lengthRegex = RegExp(r'^.{8,}$'); | |
RegExp uppercaseRegex = RegExp(r'[A-Z]'); | |
RegExp lowercaseRegex = RegExp(r'[a-z]'); | |
RegExp digitRegex = RegExp(r'\d'); | |
RegExp specialCharRegex = RegExp(r'[!@#\$%^&*(),.?":{}|<>]'); | |
// Check all criteria | |
return lengthRegex.hasMatch(password) && | |
uppercaseRegex.hasMatch(password) && | |
lowercaseRegex.hasMatch(password) && | |
digitRegex.hasMatch(password) && | |
specialCharRegex.hasMatch(password); | |
} | |
sealed class Result<T, E> { | |
const Result._(); | |
} | |
class Ok<T, E> extends Result<T, E> { | |
const Ok(this.value) : super._(); | |
final T value; | |
} | |
class Err<T, E> extends Result<T, E> { | |
const Err(this.err) : super._(); | |
final E err; | |
} | |
void foo() { | |
final Result<int, String> result = Ok(4); | |
final text = switch (result) { | |
Ok(value: int v) => v.toString(), | |
Err(err: String e) => e, | |
}; | |
} | |
void signInWithEmailAndPassword(Email email, Password password) { | |
} | |
extension type Email._(String _email) { | |
static Email? maybeFrom(String text) { | |
if(isValidEmail(text)) { | |
return Email._(text); | |
} else { | |
return null; | |
} | |
} | |
//String toString() => this._email_; | |
} | |
extension type Password._(String _pw) { | |
static Result<Password, PasswordError> tryFrom(String text) { | |
RegExp lengthRegex = RegExp(r'^.{8,}$'); | |
RegExp uppercaseRegex = RegExp(r'[A-Z]'); | |
RegExp lowercaseRegex = RegExp(r'[a-z]'); | |
RegExp digitRegex = RegExp(r'\d'); | |
RegExp specialCharRegex = RegExp(r'[!@#\$%^&*(),.?":{}|<>]'); | |
if(!lengthRegex.hasMatch(text)) { | |
return Err(PasswordError.TooShort); | |
} else if(!lowercaseRegex.hasMatch(text)) { | |
return Err(PasswordError.MissingLowercase); | |
} else if(!uppercaseRegex.hasMatch(text)) { | |
return Err(PasswordError.MissingUpercase); | |
} else if(!digitRegex.hasMatch(text)) { | |
return Err(PasswordError.MissingDigit); | |
} else if(!specialCharRegex.hasMatch(text)) { | |
return Err(PasswordError.MissingSpecialChar); | |
} | |
return Ok(Password._(text)); | |
} | |
} | |
// class Email1 { | |
// const Email1._(this._email); | |
// final String _email; | |
// static Email1? maybeFrom(String text) { | |
// if(isValidEmail(text)) { | |
// return Email1._(text); | |
// } else { | |
// return null; | |
// } | |
// } | |
// static Result<Email1,EmailError> tryFrom(String text) { | |
// if(isValidEmail(text)) { | |
// return Ok(Email1._(text)); | |
// } else { | |
// return Err(EmailError.Invalid); | |
// } | |
// } | |
// } | |
enum EmailError { | |
Invalid | |
} | |
enum PasswordError { | |
TooShort, | |
MissingUpercase, | |
MissingLowercase, | |
MissingDigit, | |
MissingSpecialChar, | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment