isValidUUID static method
- String fromString = '',
- Uint8List? fromByteList,
- ValidationMode validationMode = ValidationMode.strictRFC4122,
- bool noDashes = false,
Validates the provided uuid to make sure it has all the necessary components and formatting and returns a bool You can choose to validate from a string or from a byte list based on which parameter is passed.
Implementation
static bool isValidUUID(
{String fromString = '',
Uint8List? fromByteList,
ValidationMode validationMode = ValidationMode.strictRFC4122,
bool noDashes = false}) {
if (fromByteList != null) {
fromString = UuidParsing.unparse(fromByteList);
}
// UUID of all 0s is ok.
if (fromString == Namespace.nil.value) {
return true;
}
// If its not 36 characters in length, don't bother (including dashes).
if (!noDashes && fromString.length != 36) {
return false;
}
// If its not 32 characters in length, don't bother (excluding excluding).
if (noDashes && fromString.length != 32) {
return false;
}
// Make sure if it passes the above, that it's a valid UUID or GUID.
switch (validationMode) {
case ValidationMode.strictRFC4122:
{
var pattern = (noDashes)
? r'^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-8][0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$'
: r'^[0-9a-f]{8}-[0-9a-f]{4}-[0-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$';
final regex = RegExp(pattern, caseSensitive: false, multiLine: true);
final match = regex.hasMatch(fromString.toLowerCase());
return match;
}
case ValidationMode.nonStrict:
{
var pattern = (noDashes)
? r'^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-8][0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$'
: r'^[0-9a-f]{8}-[0-9a-f]{4}-[0-8][0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$';
final regex = RegExp(pattern, caseSensitive: false, multiLine: true);
final match = regex.hasMatch(fromString.toLowerCase());
return match;
}
default:
{
throw Exception('`$validationMode` is an invalid ValidationMode.');
}
}
}