Skip to content

Instantly share code, notes, and snippets.

@kranfix
Created April 25, 2024 01:43
Show Gist options
  • Save kranfix/67f97448c167d470f26a366337b7ebcc to your computer and use it in GitHub Desktop.
Save kranfix/67f97448c167d470f26a366337b7ebcc to your computer and use it in GitHub Desktop.
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