Skip to content

Commit 4cdd0dd

Browse files
authored
Merge pull request #8 from rogeriomq/fix/improved-email-validation
fix: improve email validation regex and enhance test coverage
2 parents 09cfe0c + 7546a9a commit 4cdd0dd

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

lib/src/validations/valid_email_validation.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ extension ValidEmailValidation on SimpleValidationBuilder<String> {
2525
SimpleValidationBuilder<String> validEmail({String? message, String? code}) {
2626
return useValidation(
2727
(value, entity) =>
28-
RegExp(r'^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$').hasMatch(value),
28+
RegExp(r'^[\w\.-]+@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$').hasMatch(value),
2929
code: code ?? Language.code.validEmail,
3030
message: message,
3131
);
@@ -54,7 +54,7 @@ extension ValidEmailNullableValidation on SimpleValidationBuilder<String?> {
5454
return useValidation(
5555
(value, entity) =>
5656
value != null &&
57-
RegExp(r'^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$').hasMatch(value),
57+
RegExp(r'^[\w\.-]+@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$').hasMatch(value),
5858
code: code ?? Language.code.validEmail,
5959
message: message,
6060
);
@@ -84,7 +84,7 @@ extension ValidEmailOrNullableValidation on SimpleValidationBuilder<String?> {
8484
return useValidation(
8585
(value, entity) =>
8686
value == null ||
87-
RegExp(r'^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$').hasMatch(value),
87+
RegExp(r'^[\w\.-]+@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$').hasMatch(value),
8888
code: code ?? Language.code.validEmail,
8989
message: message,
9090
);

test/src/validations/valid_email_validation_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,24 @@ void main() {
3737

3838
expect(result.isValid, true);
3939
});
40+
41+
test('valid email validation...', () {
42+
final validator = TestLucidValidator<UserModel>();
43+
44+
validator
45+
.ruleFor((e) => e.email, key: 'email', label: 'E-mail') //
46+
.validEmail();
47+
48+
final user = UserModel()..email = 'test@.123.com';
49+
50+
final result = validator.validate(user);
51+
52+
expect(result.isValid, false);
53+
54+
expect(result.exceptions.length, 1);
55+
56+
final error = result.exceptions.first;
57+
58+
expect(error.message, "'E-mail' is not a valid email address.");
59+
});
4060
}

0 commit comments

Comments
 (0)