3
0
Fork 0
trifid_mobile/lib/validators/dnsValidator.dart

35 lines
790 B
Dart

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