※ ChatGPTを利用し、要約された質問です(原文:perlでurlが正しいか判定したい)
perlでURLの正当性を判定する方法
このQ&Aのポイント
perlでホームページのURLが正しいか判定する方法を探しています。ネットで検索してもメールアドレスの判定方法ばかりで、ホームページに関しては情報が見つかりません。
既存の正規表現ではカンマのチェックなどがうまくできないため、正しいURLの判定方法についてアドバイスをお願いします。
全角入力やスペース、句読点、特殊文字の入力ミスなどもチェックしたいので、URLの正当性を厳密に判定する方法を教えてください。
perlでホームページのURLが正しいか判定したいのですが、ネットで調べていても出てくるのがメールアドレスの判定方法ばかりで、ホームページに関してのことがなかなか見つかりません。
if($url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}/) { }
こんな感じで適当にやっていたのですが、なぜか ,(カンマ) のチェックをスルーしてしまったりと思うように制御できておらず、
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
このページを読んでもちんぷんかんぷんで、とりあえず
if($url !~ /\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f
][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)
*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.
[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f]
[0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-
Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f
])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)
*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])
*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*
)?/){ }
こんな感じで代入してみても予想どおり構文エラーとなってしまい、どうやればいいのか困っています。(あまりの長さに理解できていないためエスケープも一切させてないので、エラーが出て当然といえば当然ですが)
そこまで厳密にでなくてもかまわないのですが、ホームページのURLに間違いがないかチェックする方法はないでしょうか。
(特に . と , や : と ; や ~ と ^ の入力間違い、スペースが入っていないかとか全角入力になっていないかなどをチェックしたいです)
お礼
大変詳しい解説ありがとうございました。 何とかうまくまとまりました。 >当初の質問文には厳密にでなくてもかまわないとあったんですけどね・・・。 確かに厳密でなくても良かったのですが、入力間違いに気づかないときのために簡易でいいからチェックできないかと思っておりました。