【发布时间】:2018-09-11 13:22:17
【问题描述】:
我需要通过我的 C# .NET 服务验证我的用户输入。用户可以输入我需要处理的域。但是,这有一些规则:
- 没有子域,所以只允许域
- 不能是 IP 地址
- 它不能只是一个主机名(所以
localhost是不行的) - 不能包含非法字符(如
[\½(等) - TLD 不一定要有效,所以
test.mmmmmmm应该通过)
到目前为止,我已经尝试了很多东西,但似乎没有一个能满足我的需求。我只需要验证一个域是否有效。这是我尝试过的一堆东西:
if(!Uri.IsWellFormedUriString(DomainName, UriKind.Absolute))
//problem: has to be an uri, but http://1 would pass
if (Uri.CheckHostName(DomainName) == UriHostNameType.Unknown)
//problem: abc would pass (probably also IPs)
if (Uri.CheckHostName(DomainName) != UriHostNameType.Dns)
//problem: abc would pass (probably also IPs)
Regex: (\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9])
//problem: IPs and subdomains are allowed but neither abc or invalid characters are allowed
似乎很容易做到。我不确定结合其中一些是否可行,但我非常怀疑。这个讨论已经被提过很多次了,但没有一个适合我的需要。
知道该怎么做吗?
【问题讨论】:
-
由于构成域的规则已经改变了好几次(例如,除了
org/com/net/gov之外,所有名称都有 3 个名称;不用等待,现在我们有了新 TLD 预计会发布 2 个域名),也许您应该从如何使用此信息来解决问题。例如。如果您需要他们路由电子邮件,请改为对其进行 MX 查找?举个例子。 -
@Damien_The_Unbeliever 我可以在域上进行查找,但如果它尚未注册,那将是一个问题。
标签: c# .net validation