2011-08-31 14 views
1

の正規表現のURLマッチングの問題GitHub https://github.com/ErisDS/Migrateでこのプロジェクトを使用して、WordpressデータベースのURL設定をLocalhostのインストールからライブURLに移行しようとしています。http:// localhost/

現時点でコードは「のhttp:// localhost /をmysitename」を交換するURLのエラーがスローされますが、新しいURLを受け入れない「http://www.mywebsitename.com」

からどのようなエラーが私はlocalhostのURLを受け入れるようにこれを更新することができますどのようなアイデア - 有効なURLとしてlocalhostを検証していないこの正規表現から来ることができますか?

完全なコードはGitHubの上で閲覧することができます。

function checkURL($url) 
{ 
    $url_regex = '/^(http\:\/\/[a-zA-Z0-9_\-]+(?:\.[a-zA-Z0-9_\-]+)*\.[a-zA-Z]{2,4}(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+\.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/'; 
if($url == 'http://') 
{ 
return false; 
}  
return preg_match($url_regex, $url); 
} 
+1

私はRegexBuddyからこれを得た ':// [-A-Z0-9 +&@#/%=〜_ | $:、;?!。 ] * [A-Z0-9 +&@#/%=〜_ | $] ' –

答えて

0

MIGRATEスクリプトの作成者がこの修正を含むようにGitHubのプロジェクトを更新しました。あなたの助けを借りてくれてありがとう。 (?HTTPS | FTP |ファイル):

https://github.com/ErisDS/Migrate

2

あなたはこれにそれを変更することにより、許容可能なホスト名には「localhost」を追加することができます。

/^(http\:\/\/(?:[a-zA-Z0-9_\-]+(?:\.[a-zA-Z0-9_\-]+)*\.[a-zA-Z]{2,4}|localhost)(?:\/[a-zA-Z0-9_]+)*(?:\/[a-zA-Z0-9_]+\.[a-zA-Z]{2,4}(?:\?[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)?)?(?:\&[a-zA-Z0-9_]+\=[a-zA-Z0-9_]+)*)$/ 

この部分はhttp://プレフィックス一致します

http\:\/\/ 

をこの部分には、ホスト名と一致します:

[a-zA-Z0-9_\-]+(?:\.[a-zA-Z0-9_\-]+)*\.[a-zA-Z]{2,4} 

だからあなただけ明示的には「localhost」を含む非キャプチャ交代グループにホスト名チェッカーを変更することができます。Xは、既存のホスト名のマッチングサブ式です

(?:X|localhost) 

(?:ビットは、キャプチャしていないグループを開始します。非キャプチャグループを使用すると、グループ番号の参照が混乱することはありません。

そして、いくつかのライブの例:私は、単純な正規表現は、1は非常によくCGIパラメータを扱っていないことを、より良いしかしあなたに役立つかもしれないと思うhttp://ideone.com/M0qqh

。これを試すことができます:

/(http:\/\/[^\/]+\/([^\s]+[^,.?!:;])?)/ 

あなたのデータに適しているかどうかを確認してください。それはかなり緩いですが、おそらくワンショット変換には十分です。これらのURLに正しく一致する必要があります。

'here is a URL http://localhost/x?a=b.' 
'More http://example.com nonsense!. 

コメントからJoseph'sを試すこともできます。

1

http:///の間にドットを要求している正規表現のどこかにあるため、動作しません。 http://localhost/whateverにはドットがないため、失敗します。

実際には、URL検証の正規表現の代わりに、filter_var()またはparse_url()のようなものを使用する必要があります。

関連する問題