Parse and separate Fully Qualified Domain Names accurately, using the Public Suffix List.
The interesting part of this library is the FullyQualifiedDomainName
record type and the two parsing methods available:
FullyQualifiedDomainName.TryParse
: safely parse the input string into a FQDN (returns anoption
)FullyQualifiedDomainName.Parse
: unsafe version ofTryParse
, throws an exception if the input string cannot be parsed
Here's a simple F# Interactive session that demonstrates how you can use this library:
> #load "nuget: FsPublicSuffix"
> open FsPublicSuffix
> FullyQualifiedDomainName.TryParse "www.google.co.uk"
val it : FullyQualifiedDomainName option = Some { TopLevelDomain = "co.uk"
Domain = "google"
SubDomain = Some "www" }
You can also pass full URLs as input:
> let fqdn = FullyQualifiedDomainName.Parse "https://www.youtube.com/feed/subscriptions"
val fqdn : FullyQualifiedDomainName = { TopLevelDomain = "com"
Domain = "youtube"
SubDomain = Some "www" }
There are two other available members:
// get the FQDN of the parsed record
fqdn.FQDN // www.youtube.com
// get the registrable domain
fqdn.Registrable // youtube.com
Here's a few more quick examples:
// non-existent TLDs are not accepted
FullyQualifiedDomainName.TryParse "google.nope" // None
// domains that cannot be registered are not accepted
FullyQualifiedDomainName.TryParse "co.uk" // None
FullyQualifiedDomainName.TryParse "uk.com" // None
// IDN and punycode are also supported
FullyQualifiedDomainName.TryParse "ουτοπία.δπθ.gr" // Some { ... }
FullyQualifiedDomainName.TryParse "xn--pxaix.gr" // Some { ... }