web-dev-qa-db-ja.com

s3バケット名の正規表現

Cloudformationを通じてs3バケットを作成しようとしています。正規表現^([0-9a-z .-]){3,63} $を使用してみましたが、新しいs3命名規則に従って無効な「...」および「---」のパターンも受け入れます。 (参照: https://docs.aws.Amazon.com/AmazonS3/latest/dev/BucketRestrictions.html )助けてください?

5
user4108565

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])$)";
2
ManojP
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
}  
1
Sunil Jakhar

@Zak正規表現を使用しましたが、100%正しくありません。 AWSバケット名のすべてのルールに this を使用しました。私は段階的に検証を行うので、次のようになります:

  • バケット名は3文字以上63文字以下である必要があります-> _^.{3,63}$_
  • バケット名に大文字またはアンダースコアを含めることはできません-> _[A-Z_]_
  • バケット名は小文字または数字で始める必要があります-> _^[a-z0-9]_
  • バケット名はIPアドレス(例:192.168.5.4)-> ^(\d+\.)+\d+$としてフォーマットしないでください。これはAWSよりも制限されています。
  • バケット名は、1つ以上の一連のラベルである必要があります。隣接するラベルは単一のピリオド(。)で区切られます-> In python _if ".." in bucket_name:_
  • ..各ラベルは小文字または数字で終了する必要があります-> ^(.*[a-z0-9]\.)*.*[a-z0-9]$
1
FilipShark

編集:必要なサイズ(3-63)を許可するように正規表現を変更し、他のいくつかのオプションを追加しました。

名前はDNSに準拠している必要があるため、次のように試すことができます。

^[A-Za-z0-9][A-Za-z0-9\-]{1,61}[A-Za-z0-9]$

参照: https://regexr.com/3psne

ピリオドを使用する必要がある場合は、これを使用します。

^[A-Za-z0-9][A-Za-z0-9\-.]{1,61}[A-Za-z0-9]$

参照: https://regexr.com/3psnb

最後に、2つの連続する「非Word」文字を許可しない場合は、次のように使用できます。

^[A-Za-z0-9](?!.*[.-]{2})[A-Za-z0-9\-.]{1,61}[A-Za-z0-9]$

参照: https://regexr.com/3psn8

ベース: サブドメインの正規表現

0
Julio