【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/30 16:42:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント35pt

Perlメモ

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

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

id:caster777

ありがとうございます。

参考になります。

2008/05/30 12:48:55

その他の回答2件)

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント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

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント35pt

Perlメモ

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

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

id:caster777

ありがとうございます。

参考になります。

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

回答回数13ベストアンサー獲得回数5

ポイント18pt

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

Perlメモ-http URL の正規表現

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

id:caster777

ありがとうございます。

2008/05/30 12:49:23

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

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

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

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

回答リクエストを送信したユーザーはいません