• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlでurlが正しいか判定したい)

perlでURLの正当性を判定する方法

mikemike7の回答

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

https?:\/\/[\w\.-~\?&=\/]{4,} がURLを調べる為に正しい表記かどうかは別として、 根本的に判定法が間違っています。 $url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}/ の記載は、前方に一致するものであって、 $url全てに適応するものではありません。 ^で0文字目から指定しているのに対し、 終了位置が不明確な為、,(カンマ)など指定以外の文字があった時点で 判定を終了してしまうため、正常に判定できていません。 $urlの初めから最後までチェックしたいなら最後に$を入れ、 if($url !~ /^https?:\/\/[\w\.-~\?&=\/]{4,}$/) { } とするべきですね。

choei
質問者

お礼

ありがとうございます。 根本解決まではその修正を施して対応したいと思います。 ちょうど今 http://www.mukairiku.net/PerlModule/CgiPlus.pm.html このページを見て、 requireで保存したコードを呼び出し、 my $flag = UrlPatternCheck($url); こんな感じでチェックしてみたのですが、internal server errorになってしまいます。 やはりあの難しいけど正しいチェック方法は簡単には利用できないのですかね?

関連するQ&A

  • URLの内容チェックがうまくいきません

    $_POST['url']に何らかの値が格納されている場合のみ、正規表現で値をチェックしたいのですが、現在のソースでは$_POST['url']が空の場合も処理が正規表現に移ってしまい、結果エラーが出てしまいます。 if ( isset($_POST['url']) && preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $_POST['url']) && mb_strlen($_POST['url']) <= 100){ 【データベース登録処理】 }else{ echo "エラー:入力内容が正しくありません"; } issetあたりが怪しいとは思うのですが、!emptyでも駄目でした。 他に何か書き方がありましたらご教授ください。

    • ベストアンサー
    • PHP
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」 ロジックは以下のように記述しています。 Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]"); Matcher m = p.matcher("文字列"); if(m.matches() == true){   System.out.println("1"); } else{   System.out.println("2"); } ※「\」と「"」はエスケープしています。 下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・ Illegal character range near index 32 [0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • perlでの判定がうまくいきません

    $ref == 0 が正常に判定されていないようです。なぜでしょうか? また、if($tag =~ m/^tag$/ && $ref == 0){について、どのように改良するのが適切でしょうか? $| = 1; my $tag = "tag"; my $ref = "test"; if($ref eq ""){$ref = "0";} $ref =~ s/%([a-f\d]{2})/pack 'H2',$1/egi; if($tag =~ m/^tag$/ && $ref == 0){ print $ref; }

    • ベストアンサー
    • Perl
  • Perl 戻り値の型の判定って出来ますか?

    Perlは引数でのOUTを返せないと認識してます。 ※ここで間違っていたらご指摘下さい。 そのために下記のように、違った型(スカラー変数または配列)を返すように切り替えた場合に呼び側はどのように判定すれば良いのでしょうか?教えて下さい。 $result = sample(); sub sample{ $abc = "abc"; @xyz = qw(x y z); if(){ return $abc; } if(){ return @xyz; } return 0; }

    • ベストアンサー
    • Perl
  • 少数部の判定

    整数部2桁、小数部1桁まで入力可能なテキストの入力チェックは以下で正しいでしょうか。 コンパイラ環境は現在ないので確認お願いします。 ・以下でコンパイルエラーは発生しませんか ・入力チェックの方法として正しいでしょうか 間違いやまたよりよい方法がある場合はアドバイスください。 Dim a() as string a=Split(Text, ".") 'Textは入力値 If(UBound(0) = 1) Then '小数点が入力されたときはa=1となる If(length(a(0)) < 2) Then エラー Else If(length(a(1)) < 1) Then エラー End if Else If If(length(a(0)) < 2) Then エラー End If End If

  • utf-8の文字列に対してURLエンコードを行なうには?

    最近 perlをutf-8で書き始めたのですが、文字コードではまっています。 cgiの内部から別のcgiへpostで全角文字を送る場合 URLエンコードしてから送ると思うのですが 文字コードがutf-8の時、どのようにURLエンコードしたら 良いのか分からず困っています。どなたかご存知でしょうか? ちなみに文字を受ける方のcgiでは以下の様にURLデコードしています。 $data =~ tr/+/ /; $data =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; 試用しているperlのバージョンはperl5.8です、よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHP 全角・半角・英数字 エラー判定

    PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。 PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。 入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。 自作したものは下記の通りです。 宜しくお願い致します。 /*エラー判定*/ $ic_check=$ic0.$ic1.$ic2; if(preg_match("/^[0-9]+$/", $ic_check)){ if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[0-90-9]+$/",$ic_check)){ $ic0=mb_convert_kana($ic0, "n", "Shift_jis"); $ic1=mb_convert_kana($ic1, "n", "Shift_jis"); $ic2=mb_convert_kana($ic2, "n", "Shift_jis"); if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[a-zA-Z]+$/",$ic_check)){ $error_msg="半角数字で入力してください"; } else{ $error_msg="半角数字で入力してください"; }

    • ベストアンサー
    • PHP
  • JavaScriptでフォームの入力項目をリアルタイムでチェックする「

    JavaScriptでフォームの入力項目をリアルタイムでチェックする「jQuery Form Validators」で全角カナや半角数字のみを入力できるようにすることはできますか? (参考にしたサイト) http://www.skuare.net/test/jvalidator.html フォームの入力項目で以下の入力のチェックが出来るようにしたいのですが可能でしょうか? ・全角カタカナのみで姓名の入力 ・半角数字のみで電話番号の入力 メールアドレスは、inputタグのサンプルにある部分をコピーすることで出来ました。 --------------------------------------- validExpress="[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?" --------------------------------------- validExpress=""の""の中を指定すれば良いのだと思うのですがどうしても解決せず、この場で質問させて頂いてます。 どうかご教授の程、宜しくお願い致します。

  • PerlプログラムをPHPで書き直しています

    Perlで作ったものをPHPで書き直しています。 似てるようで大変ですね。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; という表現ですが、これをPHPで書き直すとズバリどのように なりますか? ちなみにPERLのソースコードでは、このあと &jcode'convert(*value,'sjis'); になるのですが、PHPでPerlのこの変換を実現する一般的方法が あったら教えてください。その方法で全部書き直そうと思います。

    • ベストアンサー
    • PHP
  • メールアドレス入力チェック

    毎回初心者な質問で申し訳ないです。 Strutsを使ってフォーム作成中なのですが、Validatorではなくjavaの中でエラーチェックをしています。 入力の有無でのエラーチェックはできたのですが、メールアドレスチェックができません。 自分としては 「1文字以上の半角英数記号」@「1文字以上の半角英数記号」 じゃなかったらエラーを返すようにしたいと思い以下のように記述しました。 if (mail != "[\\d[a-zA-Z]*]+@[\\d[a-zA-Z]*]"){ errors.add("mail", new ActionMessage("errors.mail")); } 動かしてみると何を入力してもエラーがかえるようになってしまいました。 正しい記述をご存知の方、ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • Java