// Inspired by https://github.com/suragch/string_validator/blob/master/lib/src/validator.dart

bool dnsValidator(str, {requireTld = true, allowUnderscore = false}) {
  if (str == null) {
    return false;
  }

  List parts = str.split('.');
  if (requireTld) {
    var tld = parts.removeLast();
    if (parts.isEmpty || !RegExp(r'^[a-z]{2,}$').hasMatch(tld)) {
      return false;
    }
  }

  for (var part, i = 0; i < parts.length; i++) {
    part = parts[i];
    if (allowUnderscore) {
      if (part.indexOf('__') >= 0) {
        return false;
      }
    }

    if (!RegExp(r'^[a-z\\u00a1-\\uffff0-9-]+$').hasMatch(part)) {
      return false;
    }

    if (part[0] == '-' || part[part.length - 1] == '-' || part.indexOf('---') >= 0) {
      return false;
    }
  }

  return true;
}