記事中にも書いてあるとおり、あの正規表現はIPアドレスを性格に判定できませんでしたが、今回その欠点を解消した完全版をお届けします。
とりあえず結果教えろ
はい。/^([\w!#$%&'*+\-\/=?^`{|}~]+(\.[\w!#$%&'*+\-\/=?^`{|}~]+)*|"([\w!#$%&'*+\-\/=?^`{|}~. ()<>\[\]:;@,]|\\[\\"])+")@(([a-zA-Z\d\-]+\.)+[a-zA-Z]+|\[((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}|IPv6:(:(((:[\da-fA-F]{1,4}){1,7})|((:[\da-fA-F]{1,4}){0,5}:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3})|:)|([\da-fA-F]{1,4}:){1}(((:[\da-fA-F]{1,4}){1,6})|((:[\da-fA-F]{1,4}){0,4}:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3})|:)|([\da-fA-F]{1,4}:){2}(((:[\da-fA-F]{1,4}){1,5})|((:[\da-fA-F]{1,4}){0,3}:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3})|:)|([\da-fA-F]{1,4}:){3}(((:[\da-fA-F]{1,4}){1,4})|((:[\da-fA-F]{1,4}){0,2}:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3})|:)|([\da-fA-F]{1,4}:){4}(((:[\da-fA-F]{1,4}){1,3})|((:[\da-fA-F]{1,4}){0,1}:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3})|:)|([\da-fA-F]{1,4}:){5}(((:[\da-fA-F]{1,4}){1,2})|:(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}|:)|([\da-fA-F]{1,4}:){6}(:[\da-fA-F]{1,4}|(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}|:)|([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4}|:)))\])$/
(^ω^)。。。
さらに複雑になりました。
わけわかんねー人のための解説
IPアドレス以外は前回と同じなので、IPアドレスの判定部分だけ書きます。// IPv4 const REGEXP_COMPONENT_IPV4 = `(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})`; const REGEXP_DOMAIN_IPV4 = `${REGEXP_COMPONENT_IPV4}(\\.${REGEXP_COMPONENT_IPV4}){3}`; // IPv6 const REGEXP_CHARSET_IPV6 = "[\\da-fA-F]"; const REGEXP_COMPONENT_IPV6 = `${REGEXP_CHARSET_IPV6}{1,4}`; const REGEXP_COMPONENT_IPV6_0 = `:(((:${REGEXP_COMPONENT_IPV6}){1,7})|((:${REGEXP_COMPONENT_IPV6}){0,5}:${REGEXP_DOMAIN_IPV4})|:)`; const REGEXP_COMPONENT_IPV6_1 = `(${REGEXP_COMPONENT_IPV6}:){1}(((:${REGEXP_COMPONENT_IPV6}){1,6})|((:${REGEXP_COMPONENT_IPV6}){0,4}:${REGEXP_DOMAIN_IPV4})|:)`; const REGEXP_COMPONENT_IPV6_2 = `(${REGEXP_COMPONENT_IPV6}:){2}(((:${REGEXP_COMPONENT_IPV6}){1,5})|((:${REGEXP_COMPONENT_IPV6}){0,3}:${REGEXP_DOMAIN_IPV4})|:)`; const REGEXP_COMPONENT_IPV6_3 = `(${REGEXP_COMPONENT_IPV6}:){3}(((:${REGEXP_COMPONENT_IPV6}){1,4})|((:${REGEXP_COMPONENT_IPV6}){0,2}:${REGEXP_DOMAIN_IPV4})|:)`; const REGEXP_COMPONENT_IPV6_4 = `(${REGEXP_COMPONENT_IPV6}:){4}(((:${REGEXP_COMPONENT_IPV6}){1,3})|((:${REGEXP_COMPONENT_IPV6}){0,1}:${REGEXP_DOMAIN_IPV4})|:)`; const REGEXP_COMPONENT_IPV6_5 = `(${REGEXP_COMPONENT_IPV6}:){5}(((:${REGEXP_COMPONENT_IPV6}){1,2})|:${REGEXP_DOMAIN_IPV4}|:)`; const REGEXP_COMPONENT_IPV6_6 = `(${REGEXP_COMPONENT_IPV6}:){6}(:${REGEXP_COMPONENT_IPV6}|${REGEXP_DOMAIN_IPV4}|:)`; const REGEXP_COMPONENT_IPV6_7 = `(${REGEXP_COMPONENT_IPV6}:){7}(${REGEXP_COMPONENT_IPV6}|:)`; const REGEXP_DOMAIN_IPV6 = `(${REGEXP_COMPONENT_IPV6_0}|${REGEXP_COMPONENT_IPV6_1}|${REGEXP_COMPONENT_IPV6_2}|${REGEXP_COMPONENT_IPV6_3}|${REGEXP_COMPONENT_IPV6_4}|${REGEXP_COMPONENT_IPV6_5}|${REGEXP_COMPONENT_IPV6_6}|${REGEXP_COMPONENT_IPV6_7})`;これだけで充分複雑ですね。
0 件のコメント:
コメントを投稿