0

form入力する場所は簡単ですが、より良いurlものを使用するか、有効なURLかどうかを確認したいと思います。regxanything else

すでに投稿されていることについて無数の質問があることは知っていますが、それらのほとんどは、TLDsドメインやその他の場合に失敗するftp//前から非常に古いものです.https//

そういうurlスキームを本当にカバーできる回答が得られたらいいのにと思います

google.com
www.google.com
http//google.com
http//www.google.com
https://google.com
https://www.google.com
ftp://google.com

〜重複した質問を投稿して申し訳ありませんが、可能な限り更新された回答を取得していただきありがとうございます。

4

3 に答える 3

3

これは正規表現の仕事ではなく、選択した言語の既存のツールの仕事かもしれません。 正規表現は、たまたま文字列が関係するすべての問題に手を振る魔法の杖ではありません。おそらく、既に作成、テスト、およびデバッグされた既存のコードを使用する必要があります。

PHP では、parse_url関数を使用します。

Perl:URIモジュール.

ルビー:URIモジュール.

.NET: 'Uri' クラス

于 2013-10-17T21:37:41.437 に答える
2

の使用法をparse_url()以下に示しますが、@wrikken は、URL が「有効」かどうかを単純に検証するためのはるかに優れた方法を提供していますfilter_var()parse_url()指定された URL 文字列をその構成要素に単純に解析し、URL が壊滅的に壊れていfalseない限り、明らかに値を返しません。

filter_var()ドメイン名に使用されているアンダースコアなどのマイナーなものを検出するのに十分な感度があります。

var_dump(
  filter_var(
    'http://stack-overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105',
     FILTER_VALIDATE_URL
  )
);

//output: string(113) "http://stack-overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105"

var_dump(
  filter_var(
    'http://stack_overflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105',
    FILTER_VALIDATE_URL
  )
);

//output: bool(false)

parse_url()すでに有効であることがわかっている URL の部分を抽出することに任せた方がよいでしょう。

var_dump(parse_url('http://stackoverflow.com/questions/19437105/using-regx-how-to-validate-url?noredirect=1#comment28819663_19437105'));

出力:

array(5) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(17) "stackoverflow.com"
  ["path"]=>
  string(50) "/questions/19437105/using-regx-how-to-validate-url"
  ["query"]=>
  string(12) "noredirect=1"
  ["fragment"]=>
  string(24) "comment28819663_19437105"
}

またはどうですか:

于 2013-10-17T21:59:05.247 に答える