Мне нужно проверить входные данные моего пользователя через службу 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
Похоже, что-то легко сделать. Я не уверен, что объединение некоторых из них может сработать, но я сильно сомневаюсь в этом. Эта дискуссия поднималась много раз, но ни одна из них не удовлетворяла моим потребностям.
Любая подсказка, что делать?