【PHP 4.3.9 正規表現】


正規表現、やっぱり苦手です。
得意な方お願いします。


URLが正しいかどうかチェック

if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $url)) {
return true;
} else {
return false;
}


これだと、
http://www
がとおってしまいます(´・ω・`)

回答の条件
  • 1人2回まで
  • 登録:2008/05/28 15:51:01
  • 終了:2008/05/30 16:42:25

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/05/28 18:01:46

ポイント35pt

Perlメモ

上記のサイトは Perl に関してのものだが、preg_match は Perl 互換の関数なのでほとんどそのまま使えるはず。

見てのとおりまじめにやろうとするとバカ長くなるので必要な部分のみもってくればいいと思う。

id:caster777

ありがとうございます。

参考になります。

2008/05/30 12:48:55

その他の回答(2件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/05/28 16:45:41

ポイント27pt

正規表現だけでカンペキに、と言うのは困難だと思いますが、簡易的に「ドット + トップレベルドメイン」で終わってないものをはじくとか。

preg_match("{s?https?://([-_.!~*'()a-z0-9;/?:@&=+$,%#]+)\.[a-z]+$}i", $url)

今のところトップレベルドメインに使われているのはアルファベットだけのようなので [a-z] にしましたが、

将来的には分かりません。

また http://localhost/ もはじいてしまうので、これも通すならもう一捻り必要です。

id:caster777

ありがとうございます。

なるほど、

http://localhost/

の事は忘れていました(*_*)

ん~ちょっと考えてみます。

ありがとうございました。

2008/05/28 16:50:19
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/05/28 18:01:46ここでベストアンサー

ポイント35pt

Perlメモ

上記のサイトは Perl に関してのものだが、preg_match は Perl 互換の関数なのでほとんどそのまま使えるはず。

見てのとおりまじめにやろうとするとバカ長くなるので必要な部分のみもってくればいいと思う。

id:caster777

ありがとうございます。

参考になります。

2008/05/30 12:48:55
id:mattz No.3

mattz回答回数13ベストアンサー獲得回数52008/05/28 18:05:25

ポイント18pt

http://www.din.or.jp/~ohzaki/perl.htm#httpURL

Perlメモ-http URL の正規表現

preg_matchはperl互換の正規表現ですから、引用符に気を付けて翻訳すればそのまま使えますよ(一番最後に書いてある簡易版でも、それなりに動きます)。

id:caster777

ありがとうございます。

2008/05/30 12:49:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません