Cloudformationを通じてs3バケットを作成しようとしています。正規表現^([0-9a-z .-]){3,63} $を使用してみましたが、新しいs3命名規則に従って無効な「...」および「---」のパターンも受け入れます。 (参照: https://docs.aws.Amazon.com/AmazonS3/latest/dev/BucketRestrictions.html )助けてください?
S3バケット名の正規表現:
String S3_REPORT_NAME_PATTERN = "[0-9A-Za-z!\\-_.*\'()]+";
String S3_PREFIX_PATTERN = "[0-9A-Za-z!\\-_.*\\'()/]*";
String S3_BUCKET_PATTERN = "(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)";
var bucketRGEX = new RegExp(/(?=^.{3,63}$)/);
var bucketRGEX1 = new RegExp(/(?!^(\d+\.)+\d+$)/);
var bucketRGEX2 = new RegExp(/(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)/);
var result = bucketRGEX.test(bucketName);
var result1 = bucketRGEX1.test(bucketName);
var result2 = bucketRGEX2.test(bucketName);
console.log('bucketName '+bucketName +' result '+result);
console.log('bucketName '+bucketName +' result1 '+result1);
console.log('bucketName '+bucketName +' result 2 '+result2);
if(result && result1 && result2)
{
//condition pass
}
else
{
//not valid bucket name
}
@Zak正規表現を使用しましたが、100%正しくありません。 AWSバケット名のすべてのルールに this を使用しました。私は段階的に検証を行うので、次のようになります:
^.{3,63}$
_[A-Z_]
_^[a-z0-9]
_^(\d+\.)+\d+$
としてフォーマットしないでください。これはAWSよりも制限されています。if ".." in bucket_name:
_^(.*[a-z0-9]\.)*.*[a-z0-9]$
編集:必要なサイズ(3-63)を許可するように正規表現を変更し、他のいくつかのオプションを追加しました。
名前はDNSに準拠している必要があるため、次のように試すことができます。
^[A-Za-z0-9][A-Za-z0-9\-]{1,61}[A-Za-z0-9]$
ピリオドを使用する必要がある場合は、これを使用します。
^[A-Za-z0-9][A-Za-z0-9\-.]{1,61}[A-Za-z0-9]$
最後に、2つの連続する「非Word」文字を許可しない場合は、次のように使用できます。
^[A-Za-z0-9](?!.*[.-]{2})[A-Za-z0-9\-.]{1,61}[A-Za-z0-9]$
ベース: サブドメインの正規表現