isValidUUID static method

bool isValidUUID({
  1. String fromString = '',
  2. Uint8List? fromByteList,
  3. ValidationMode validationMode = ValidationMode.strictRFC9562,
  4. 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.strictRFC9562,
    bool noDashes = false}) {
  if (fromByteList != null) {
    fromString = UuidParsing.unparse(fromByteList);
  }

  // UUID of all 0s is ok.
  if (fromString == Namespace.nil.value) {
    return true;
  }

  // UUID of all Fs is ok.
  if (fromString == Namespace.max.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) {
    // ignore: deprecated_member_use_from_same_package
    case ValidationMode.strictRFC9562 || 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;
      }
  }
}