我试图通过cloudformation创建一个s3存储桶。我尝试使用正则表达式^([0-9a-z .-]){3,63} $,但它也接受模式" ..."和" ---"根据新的s3命名约定无效。 (参考:https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html)请帮帮忙?
答案 0 :(得分:3)
规格有点令人困惑,但主要标准似乎是:
如果是这样,那么这个正则表达式应该匹配:
(?=^.{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])$)
第一组(?=^.{3,63}$)
向前看以确保匹配长度在3到63个字符之间。
下一组(?!^(\d+\.)+\d+$)
向前看禁止匹配看起来像IP地址的存储桶名称。
最后一组(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)
匹配零个或多个标签,后跟一个点(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*
,后面只有一个标签([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])
。
答案 1 :(得分:3)
我对Zak的答案做了一些调整。我发现这有点太复杂了,因此抛出了有效的域名。这是新的正则表达式(可在regex101.com **上进行测试):
<?php
require_once("db.php");
$book_title = $book_author = $book_category = $isbn_no = $purchase_date = $edition = $pages = $publisher = $book_link = $book_internal = $cover_art = '';
if(isset($_POST['upload_books'])) {
$file = $_FILES["book_internal"]; //getting user uploaded file
move_uploaded_file($file["tmp_name"], "uploads/books" .$file["name"]); //save file to upload folder
$book_title = mysqli_real_escape_string($conn, $_POST['book_title']);
$book_author = mysqli_real_escape_string($conn, $_POST['book_author']);
$book_category = mysqli_real_escape_string($conn, $_POST['book_category']);
$isbn_no = mysqli_real_escape_string($conn, $_POST['isbn_no']);
$purchase_date = mysqli_real_escape_string($conn, $_POST['purchase_date']);
$edition = mysqli_real_escape_string($conn, $_POST['edition']);
$pages = mysqli_real_escape_string($conn, $_POST['pages']);
$publisher = mysqli_real_escape_string($conn, $_POST['publisher']);
$book_link = mysqli_real_escape_string($conn, $_POST['book_link']);
$book_internal = mysqli_real_escape_string($conn, $_POST['book_internal']);
$cover_art = mysqli_real_escape_string($conn, $_POST['cover_art']);
$sql = "INSERT INTO books (book_title, book_author, book_category, isbn_no, purchase_date, edition, pages, publisher, book_link, book_internal, cover_art)
VALUES ('$book_title', '$book_author', '$book_category', '$isbn_no', '$purchase_date', '$edition', '$pages', '$publisher', '$book_link', '$book_internal', '$cover_art')";
$result = mysqli_query($conn, $sql);
if($result) {
header("location: upload-books.php");
echo "Upload successful!";
}
else {
echo "Error:".mysqli_error($conn);
}
}
?>
第一部分是负前行(?!^(\d{1,3}\.){3}\d{1,3}$)(^[a-z0-9]([a-z0-9-]*(\.[a-z0-9])?)*$)
,它仅与有效IP地址匹配。基本上,我们尝试匹配1-3个数字,然后匹配3个周期((?!^(\d{1,3}\.){3}\d{1,3}$)
),再匹配1-3个数字(\d{1,3}\.){3}
)。
第二部分说明名称必须以小写字母或数字(\d{1,3}
)开头,后跟0至多次(^[a-z0-9]
)的小写字母,数字或连字符。如果有句点,则必须在其后加上小写字母或数字([a-z0-9-]*
)。最后两个模式重复0到很多次((\.[a-z0-9])?
)。
正则表达式不会尝试强制执行AWS规定的大小限制(3-63个字符)。可以通过另一个正则表达式(([a-z0-9-]*(\.[a-z0-9])?)*
)或通过检查字符串的大小来解决。
**在该链接上,我添加的测试之一失败了,但是,如果您切换到测试区域并键入相同的模式,则测试通过。如果将其复制/粘贴到终端中,它也可以工作,因此我认为这是regex101.com方面的错误。
答案 2 :(得分:1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.bundle.min.js"></script>
答案 3 :(得分:0)
修改:修改正则表达式以允许所需大小(3-63)并添加其他一些选项。
名称必须符合DNS标准,因此您可以尝试使用:
In [54]: DF1['new_col'] = DF1.Team.map(DF2.set_index('Team').Rating)
In [55]: DF1
Out[55]:
Team new_col
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
5 A 1
6 C 3
7 B 2
8 B 2
如果您需要使用句号,请使用此选项:
^[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]$
答案 4 :(得分:0)
我使用了@Zak正则表达式,但并非100%正确。我将this用于AWS桶名称的所有规则。我逐步进行验证,因此看起来像这样:
^.{3,63}$
[A-Z_]
^[a-z0-9]
^(\d+\.)+\d+$
。这比AWS更为严格。if ".." in bucket_name:
^(.*[a-z0-9]\.)*.*[a-z0-9]$
答案 5 :(得分:0)
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])$)";
答案 6 :(得分:0)
AWS发布了新指南,其中“。”不建议使用,并且以'xn--'开头的存储桶名称现已被禁止(https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html)。如果您不允许“。”正则表达式变得更具可读性:
(?=^.{3,63}$)(?!xn--)([a-z0-9](?:[a-z0-9-]*)[a-z0-9])$
答案 7 :(得分:0)
以下正则表达式满足AWS规范,前提是您不希望在存储桶名称中允许.
(这是建议,否则将无法启用Transfer Acceleration):
^((?!xn--)[a-z0-9][a-z0-9-]{1,61}[a-z0-9])$
这是一个好方法,因为它可以被合并到更复杂的检查中,只需用其他字符串替换^
和$
,从而可以进行ARN检查等等。