[解決済み] PythonでURLを正規表現で検証するには?
質問
Google App Engineでアプリを構築しています。私はPythonに信じられないほど新しく、過去3日間、次の問題に対して頭を叩いています。
私はRSSフィードを表すクラスを持っており、このクラスの中にsetUrlというメソッドを持っています。このメソッドへの入力はURLです。
私はre pythonモジュールを使ってRFC 3986 Reg-exの検証をしようとしています( http://www.ietf.org/rfc/rfc3986.txt )
以下は は は機能するのでしょうか?
p = re.compile('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?')
m = p.match(url)
if m:
self.url = url
return url
どのように解決するのですか?
URL を簡単にパース (および検証) する方法として
urlparse
(
py2
,
py3
) モジュールを使用します。
正規表現が面倒くさい。
ほとんどのものが有効なURLになるので、"validate" メソッドはありません。 それを分割するための句読点の規則があります。 句読点がない場合でも、有効な URL があります。
RFC を注意深くチェックして、"invalid" URL を構築できるかどうかを確認します。 このルールは非常に柔軟です。
例えば
:::::
は有効なURLです。 パスは
":::::"
. かなり愚かなファイル名ですが、有効なファイル名です。
また
/////
は有効なURLです。 netloc ("ホスト名")は
""
. パスは
"///"
. また、愚かな。 も有効です。 この URL は正規化すると
"///"
に正規化されますが、これは同等です。
のようなものです。
"bad://///worse/////"
は完全に有効です。 間抜けですが、有効です。
ボトムライン . 解析して、何か不愉快なことがないか、断片的に見てみましょう。
スキームを常に "http" にしたいですか? netloc が常に "www.somename.somedomain" であることを望みますか? パスは unix 風にしたいですか? それともウィンドウズ風? クエリ文字列を削除しますか? それとも保存しますか?
これらはRFCで規定された検証ではありません。 これらはあなたのアプリケーションに固有のバリデーションです。
関連
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Python 言語を決定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptでテキスト中のURLを検出する
-
[解決済み] Pythonでurlを検証する方法は?(奇形かそうでないか)
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。