Skip to content

Commit

Permalink
Update regex for email address (matrix-org#1826)
Browse files Browse the repository at this point in the history
* Update regex for email address

* Add changelog

Signed-off-by: yostyle <y.pintas@gmail.com>

* Add unit test

* rename changelog

---------

Signed-off-by: yostyle <y.pintas@gmail.com>
  • Loading branch information
yostyle committed Dec 6, 2023
1 parent f666b8f commit 19f5acd
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
2 changes: 1 addition & 1 deletion MatrixSDK/Utils/MXTools.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#warning File has not been annotated with nullability, see MX_ASSUME_MISSING_NULLABILITY_BEGIN

#pragma mark - Constant definition
NSString *const kMXToolsRegexStringForEmailAddress = @"[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}";
NSString *const kMXToolsRegexStringForEmailAddress = @"^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";

// The HS domain part in Matrix identifiers
#define MATRIX_HOMESERVER_DOMAIN_REGEX @"[A-Z0-9]+((\\.|\\-)[A-Z0-9]+){0,}(:[0-9]{2,5})?"
Expand Down
52 changes: 52 additions & 0 deletions MatrixSDKTests/MXToolsUnitTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,58 @@ - (void)testMatrixIdentifiers
XCTAssertTrue([MXTools isMatrixGroupIdentifier:@"+matrix:matrix.org"]);
}

- (void)testEmailAddresses
{
XCTAssertTrue([MXTools isEmailAddress:@"alice@matrix.org"]);
XCTAssertTrue([MXTools isEmailAddress:@"alice@matrix"]);
XCTAssertTrue([MXTools isEmailAddress:@"al-i_ce@matrix"]);
XCTAssertTrue([MXTools isEmailAddress:@"al+ice@matrix.org"]);
XCTAssertTrue([MXTools isEmailAddress:@"al=ice@matrix.org"]);
XCTAssertTrue([MXTools isEmailAddress:@"*@example.net"]);
XCTAssertTrue([MXTools isEmailAddress:@"fred&barny@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"---@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"foo-bar@example.net"]);
XCTAssertTrue([MXTools isEmailAddress:@"mailbox.sub1.sub2@this-domain"]);
XCTAssertTrue([MXTools isEmailAddress:@"prettyandsimple@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"very.common@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"disposable.style.email.with+symbol@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"other.email-with-dash@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"x@example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"example-indeed@strange-example.com"]);
XCTAssertTrue([MXTools isEmailAddress:@"admin@mailserver1"]);
XCTAssertTrue([MXTools isEmailAddress:@"#!$%&'*+-/=?^_`{}|~@example.org"]);
XCTAssertTrue([MXTools isEmailAddress:@"example@localhost"]);
XCTAssertTrue([MXTools isEmailAddress:@"example@s.solutions"]);
XCTAssertTrue([MXTools isEmailAddress:@"user@localserver"]);
XCTAssertTrue([MXTools isEmailAddress:@"user@tt"]);
XCTAssertTrue([MXTools isEmailAddress:@"xn--80ahgue5b@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq"]);
XCTAssertTrue([MXTools isEmailAddress:@"nothing@xn--fken-gra.no"]);

XCTAssertFalse([MXTools isEmailAddress:@"alice.matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"al ice@matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"al(ice@matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"alice@"]);
XCTAssertFalse([MXTools isEmailAddress:@"al\nice@matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"al@ice@matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"al@ice@.matrix.org"]);
XCTAssertFalse([MXTools isEmailAddress:@"Just a string"]);
XCTAssertFalse([MXTools isEmailAddress:@"string"]);
XCTAssertFalse([MXTools isEmailAddress:@"me@"]);
XCTAssertFalse([MXTools isEmailAddress:@"@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"me.@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@".me@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"me@example..com"]);
XCTAssertFalse([MXTools isEmailAddress:@"me\\@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"Abc.example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"A@b@c@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"a\"b(c)d,e:f;g<h>i[j\\k]l@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"just\"not\"right@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"this is\"not\\allowed@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"this\\ still\\\"not\\\\allowed@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"john..doe@example.com"]);
XCTAssertFalse([MXTools isEmailAddress:@"john.doe@example..com"]);
}


#pragma mark - Strings encoding

Expand Down
1 change: 1 addition & 0 deletions changelog.d/pr-1826.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update regex for email address to be aligned email format in RFC 5322

0 comments on commit 19f5acd

Please sign in to comment.