public static boolean isValidDnsBucketName()

in services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/BucketUtils.java [50:145]


    public static boolean isValidDnsBucketName(final String bucketName,
                                               final boolean throwOnError) {

        if (bucketName == null) {
            return exception(throwOnError, "Bucket name cannot be null");
        }

        if (bucketName.length() < MIN_BUCKET_NAME_LENGTH ||
            bucketName.length() > MAX_BUCKET_NAME_LENGTH) {

            return exception(
                throwOnError,
                "Bucket name should be between " + MIN_BUCKET_NAME_LENGTH + " and " + MAX_BUCKET_NAME_LENGTH + " characters long"
            );
        }

        if (IP_ADDRESS_PATTERN.matcher(bucketName).matches()) {
            return exception(
                throwOnError,
                "Bucket name must not be formatted as an IP Address"
            );
        }

        char previous = '\0';

        for (int i = 0; i < bucketName.length(); ++i) {
            char next = bucketName.charAt(i);

            if (next >= 'A' && next <= 'Z') {
                return exception(
                    throwOnError,
                    "Bucket name should not contain uppercase characters"
                );
            }

            if (next == ' ' || next == '\t' || next == '\r' || next == '\n') {
                return exception(
                    throwOnError,
                    "Bucket name should not contain white space"
                );
            }

            if (next == '.') {
                if (previous == '\0') {
                    return exception(
                        throwOnError,
                        "Bucket name should not begin with a period"
                    );
                }
                if (previous == '.') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain two adjacent periods"
                    );
                }
                if (previous == '-') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain dashes next to periods"
                    );
                }
            } else if (next == '-') {
                if (previous == '.') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain dashes next to periods"
                    );
                }
                if (previous == '\0') {
                    return exception(
                        throwOnError,
                        "Bucket name should not begin with a '-'"
                    );
                }
            } else if ((next < '0')
                       || (next > '9' && next < 'a')
                       || (next > 'z')) {

                return exception(
                    throwOnError,
                    "Bucket name should not contain '" + next + "'"
                );
            }

            previous = next;
        }

        if (previous == '.' || previous == '-') {
            return exception(
                throwOnError,
                "Bucket name should not end with '-' or '.'"
            );
        }

        return true;
    }