@@ -48,6 +48,54 @@ export default class Email implements EmailProps {
4848 'putlook.com' : 'outlook.com' ,
4949 } ;
5050
51+ private static readonly typoTLDs : { [ key : string ] : string } = {
52+ comm : 'com' ,
53+ commm : 'com' ,
54+ commmm : 'com' ,
55+ comn : 'com' ,
56+
57+ cbm : 'com' ,
58+ ccm : 'com' ,
59+ cdm : 'com' ,
60+ cem : 'com' ,
61+ cfm : 'com' ,
62+ cgm : 'com' ,
63+ chm : 'com' ,
64+ cim : 'com' ,
65+ cjm : 'com' ,
66+ ckm : 'com' ,
67+ clm : 'com' ,
68+ cmm : 'com' ,
69+ cnm : 'com' ,
70+ cpm : 'com' ,
71+ cqm : 'com' ,
72+ crm : 'com' ,
73+ csm : 'com' ,
74+ ctm : 'com' ,
75+ cum : 'com' ,
76+ cvm : 'com' ,
77+ cwm : 'com' ,
78+ cxm : 'com' ,
79+ cym : 'com' ,
80+ czm : 'com' ,
81+
82+ col : 'com' ,
83+ con : 'com' ,
84+
85+ dom : 'com' ,
86+ don : 'com' ,
87+ som : 'com' ,
88+ son : 'com' ,
89+ vom : 'com' ,
90+ von : 'com' ,
91+ xom : 'com' ,
92+ xon : 'com' ,
93+
94+ clam : 'com' ,
95+ colm : 'com' ,
96+ comcom : 'com' ,
97+ } ;
98+
5199 private static readonly equivalentDomains : { [ key : string ] : string } = {
52100 'googlemail.com' : 'gmail.com' ,
53101 'pm.me' : 'protonmail.com' ,
@@ -318,13 +366,16 @@ export default class Email implements EmailProps {
318366 domain = punycode . toASCII ( domain ) ;
319367
320368 domain = domain . replace ( / (?: \. c o m ) { 2 , } $ / , '.com' ) ;
321- domain = domain . replace ( / \. c o m [ ^ . ] + $ / , '.com' ) ;
322- domain = domain . replace (
323- / (?: \. (?: c o m | c [ a - z ] { 1 , 2 } m | c o [ l n ] | [ d s v x ] o [ m n ] | ) ) $ / ,
324- '.com'
325- ) ;
326369 domain = domain . replace ( / ^ \d + (?: g m a i l ? \. c o m ) $ / , 'gmail.com' ) ;
327370
371+ const idx = domain . lastIndexOf ( '.' ) ;
372+ if ( idx !== - 1 ) {
373+ const tld = domain . substring ( idx + 1 ) ;
374+ if ( Object . prototype . hasOwnProperty . call ( Email . typoTLDs , tld ) ) {
375+ domain = domain . substring ( 0 , idx ) + '.' + Email . typoTLDs [ tld ] ;
376+ }
377+ }
378+
328379 if ( Object . prototype . hasOwnProperty . call ( Email . typoDomains , domain ) ) {
329380 domain = Email . typoDomains [ domain ] ;
330381 }
0 commit comments