// 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; }