アドレスバーに入力された文字が検索ワードかURLか判定するにはどうすればいい?

タグの編集
投稿者 winvis  (学生) 投稿日時 2009/9/9 10:36:28
題名の通りなのですが、ブラウザー(webbrowser)を作っているのですが
アドレスバー(combobox)に、入力された文字がURLなのか
検索ワードなのか、判定するにはどうしたらいいですか?
どうやっていいのか全くわかりませんorz
どなたかお助けをorz
投稿者 あにす  (社会人) 投稿日時 2009/9/9 17:02:17
調べてみたのですが、厳密に判定するのは難しいようです。
正規表現である程度の精度で判定出来るようです。正規表現は全くわからないので
http://d.hatena.ne.jp/seto-san/20090123/1232679235
の正規表現をそのまま使って書いてみました。

Imports System.Text.RegularExpressions

Public Class Form1
    Dim regex As New Regex("\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)?")

    Private Sub TextBox1_TextChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TextBox1.TextChanged
        If regex.IsMatch(sender.Text) Then
            sender.BackColor = Color.White
        Else
            sender.BackColor = Color.Red
        End If
    End Sub
End Class
投稿者 ?-?  (その他) 投稿日時 2009/9/9 17:43:22
DNSに問い合わせて存在するドメインかどうかとか、実際に入力されたリクエストに対するレスポンスコードがエラーだったら検索ワードとして扱う、という方法を考えた私は考えが甘いです・・・
投稿者 winvis  (学生) 投稿日時 2009/9/10 02:56:09
回答ありがとうございます
正規表現とは、思いつきませんでした
PHP用なのか、http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9340と、入れても、Elseに飛ばされてしまいました
自分も正規表現について調べたいと思います
投稿者 mitchin  (社会人) 投稿日時 2009/9/10 12:00:57
あんまり厳密に判定しなくていいなら正規表現文字列はこんな感じでいいかも。
https?://\w+([-+.]\w+)*\.\w+([-.]\w+)*
投稿者 nihihi  (中学生) 投稿日時 2009/9/20 23:27:18
   
If アドレス.StartWith("http://") = True Then
    'URLのときの処理 
Else
    '検索ワードのときの処理 
End If
投稿者 winvis  (学生) 投稿日時 2009/9/24 08:41:29
返答が遅れ申し訳ありません!!
判定の処理は、あにすさんのソースコードを、使わせてもらいました
でも、いろんなやり方があるんですね~