{"ScriptPreparationCode":"function domain1(x, wild = \u0027n\u0027, subs = \u0027o\u0027) {\r\n return x.length \u003C 256 \u0026\u0026 new RegExp(\r\n \u0060^(?=(\u0060 \u002B // capture\r\n (wild === \u0027o\u0027 \u0026\u0026 \u0027(?:\\\\*\\\\.)?\u0027 || wild === \u0027r\u0027 \u0026\u0026 \u0027(?:\\\\*\\\\.)\u0027 || \u0027\u0027) \u002B // start with *. if allowed/required\r\n \u0060(?:[a-z\\\\d](?:[-a-z\\\\d]{0,61}[a-z\\\\d])?\\\\.)\u0060 \u002B // [a-z0-9-] up to 63 chars, can\u0027t start or end w/ dash\r\n (subs === \u0027o\u0027 \u0026\u0026 \u0027\u002B\u0027 || subs === \u0027r\u0027 \u0026\u0026 \u0027{2,}\u0027 || \u0027\u0027) \u002B // subdomains or not\r\n \u0060(?!\\\\d\u002B$)\u0060 \u002B // tld can\u0027t be all digits\r\n \u0060(?:[a-z\\\\d][-a-z\\\\d]{0,22}[a-z\\\\d])\u0060 \u002B // tld up to 24 chars\r\n \u0060))\\\\1$\u0060 // end capture\r\n , \u0027i\u0027).test(x);\r\n}\r\n\r\nfunction domain2(x, wild = \u0027n\u0027, subs = \u0027o\u0027) {\r\n if (x.indexOf(\u0027..\u0027) \u003E 0 || x.indexOf(\u0027.\u0027) === -1 ||\r\n x.indexOf(\u0027.-\u0027) \u003E 0 || x.indexOf(\u0027-.\u0027) \u003E 0 ||\r\n x[0] === \u0027-\u0027 || x[x.length - 1] === \u0027-\u0027\r\n ) {\r\n return false;\r\n }\r\n const parts = x.split(\u0027.\u0027);\r\n // Wild bailout\r\n if (wild === \u0027r\u0027 \u0026\u0026 parts[0] !== \u0027*\u0027) {\r\n return false;\r\n }\r\n else if (parts[0] === \u0027*\u0027) {\r\n parts.shift();\r\n }\r\n // Subdomain bailout\r\n if (subs === \u0027r\u0027 \u0026\u0026 parts.length \u003C 3 || subs === \u0027n\u0027 \u0026\u0026 parts.length \u003E 2) {\r\n return false;\r\n }\r\n const valid = /^[a-z0-9\\-]\u002B$/i;\r\n // tld btwn 2 and 24 chars, can\u0027t be all digits\r\n const tld = parts.pop();\r\n if (!valid.test(tld) || /^\\d\u002B$/.test(tld)\r\n || tld.length \u003E 24 || tld.length \u003C 2) {\r\n return false;\r\n }\r\n return parts.every(p =\u003E {\r\n return p.length \u003C= 63 \u0026\u0026 valid.test(p);\r\n });\r\n}\r\n","TestCases":[{"Name":"domain 1","Code":"domain1(\u0022*.google.com\u0022, \u0027o\u0027, \u0027n\u0027);\r\ndomain1(\u0022abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com\u0022, \u0027n\u0027)\r\ndomain1(\u0022abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.22\u0022, \u0027n\u0027)\r\ndomain1(\u0022xn--d1ai6ai.xn--p1ai\u0022, \u0027r\u0027)\r\ndomain1(\u0022*.x.XN--VERMGENSBERATUNG-PWB.co\u0022, \u0027o\u0027, \u0027r\u0027)\r\ndomain1(\u0022*.x.XN--VERMGENSBERATUNG-PWB\u0022, \u0027o\u0027, \u0027n\u0027)\r\ndomain1(\u0022mkyong.t.t.c\u0022, \u0027n\u0027)\r\ndomain1(\u0022a.com\u0022)","IsDeferred":false},{"Name":"domain 2","Code":"\r\ndomain2(\u0022*.google.com\u0022, \u0027o\u0027, \u0027n\u0027);\r\ndomain2(\u0022abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com\u0022, \u0027n\u0027)\r\ndomain2(\u0022abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.xyzabcdefghijk.com2.22\u0022, \u0027n\u0027)\r\ndomain2(\u0022xn--d1ai6ai.xn--p1ai\u0022, \u0027r\u0027)\r\ndomain2(\u0022*.x.XN--VERMGENSBERATUNG-PWB.co\u0022, \u0027o\u0027, \u0027r\u0027)\r\ndomain2(\u0022*.x.XN--VERMGENSBERATUNG-PWB\u0022, \u0027o\u0027, \u0027n\u0027)\r\ndomain2(\u0022mkyong.t.t.c\u0022, \u0027n\u0027)\r\ndomain2(\u0022a.com\u0022)","IsDeferred":false}]}