gpt4 book ai didi

regex - 如何使用正则表达式来验证 iSCSI 目标名称?

转载 作者:行者123 更新时间:2023-12-01 11:55:53 24 4
gpt4 key购买 nike

我正在尝试制作一个正则表达式来验证 iSCSI 限定名称。限定名称的一个例子是 iqn.2011-08.com.example:storage 这个例子是最小的,我见过其他更扩展的例子。

到目前为止,我必须验证的是:

print "Enter a new target name: ";

my $target_name = <STDIN>;

chomp $target_name;

if ($target_name =~ /^iqn\.\d{4}-\d{2}/xmi) {

print GREEN . "Target name is valid!" . RESET . "\n";

} else {

print RED . "Target name is not valid!" . RESET . "\n";

}

我怎样才能将它扩展到与 : 一起工作?我不会在 : 之后进行解析,因为它是一个描述标签。

域名的大小有限制吗?

最佳答案

根据 RFC3270(以及 RFC1035),

/
(?(DEFINE)
(?<IQN_PAT>
iqn
\.
[0-9]{4}-[0-9]{2}
\.
(?&REV_SUBDOMAIN_PAT)
(?: : .* )?
)

(?<EUI_PAT>
eui
\.
[0-9A-Fa-f]{16}
)

(?<REV_SUBDOMAIN_PAT>
(?&LABEL_PAT) (?: \. (?&LABEL_PAT) )*
)

(?<LABEL_PAT>
[A-Za-z] (?: [A-Za-z0-9\-]* [A-Za-z0-9] )?
)
)

^ (?: (?&IQN_PAT) | (?&EUI_PAT) ) \z
/sx

尚不清楚 eui 名称是否接受小写的十六进制数字。我认为允许它们更安全。

如果你压缩上面的代码,你会得到 /^(?:iqn\.[0-9]{4}-[0-9]{2}(?:\.[A-Za-z ](?:[A-Za-z0-9\-]*[A-Za-z0-9])?)+(?::.*)?|eui\.[0-9A-Fa-f] {16})\z/s.

(顺便说一句,你使用/m是错误的,你使用/i是错误的,而\d可以匹配远超过允许的 [0-9]。)

关于regex - 如何使用正则表达式来验证 iSCSI 目标名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7355677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com