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 <[email protected]>

* Add unit test

* rename changelog

---------

Signed-off-by: yostyle <[email protected]>
  • Loading branch information
yostyle authored 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:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"alice@matrix"]);
XCTAssertTrue([MXTools isEmailAddress:@"al-i_ce@matrix"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"*@example.net"]);
XCTAssertTrue([MXTools isEmailAddress:@"fred&[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"mailbox.sub1.sub2@this-domain"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"admin@mailserver1"]);
XCTAssertTrue([MXTools isEmailAddress:@"#!$%&'*+-/=?^_`{}|[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"example@localhost"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"user@localserver"]);
XCTAssertTrue([MXTools isEmailAddress:@"user@tt"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);
XCTAssertTrue([MXTools isEmailAddress:@"[email protected]"]);

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


#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.