web-dev-qa-db-ja.com

URLの正規表現

URLを検証する正規表現を作成しました。

4つすべてが機能しています

今、(www.example.com--thisisincorrect)のようなテキストを入力している場合、dbに入力して保存することができます

私が使用した正規表現は次のとおりです。

http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

そして

([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

助けてください!

28
xorpower

URLに正規表現は必要ありません。これにはSystem.Uriクラスを使用してください。例えば。このために Uri.IsWellFormedUriString メソッドを使用します。

bool isUri = Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute);
71
Alex

最高の正規表現:

private bool IsUrlValid(string url)
{

    string pattern = @"^(http|https|ftp|)\://|[a-zA-Z0-9\-\.]+\.[a-zA-Z](:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
    Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return reg.IsMatch(url);
}
16
user1335958

厳密なマッチングのために正規表現を作成する場合、「^」で始まり「$」で終わることを確認する必要があります。そうでない場合、正規表現は一致する部分文字列を見つけるかどうかを確認します。

  • 「^」は行の先頭に一致することを意味します
  • 「$」は行末に一致することを意味します。

ただし、正規表現を使用してURLを一致させるとエラーが発生しやすくなります。既存のフレームワークがより適切に機能するようになります(パラメーター、未知のドメイン、ドメインの代わりにIPを含むURLなど、URLに潜在的なトラップがたくさんあります....)

2
Bruce

それを試してください:

bool IsValidURL(string URL)
{
    string Pattern = @"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$";
    Regex Rgx = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return Rgx.IsMatch(URL);
}

次のようなURLを受け入れます。

  • http(s)://www.example.com
  • http(s)://stackoverflow.example.com
  • http(s)://www.example.com/page
  • http(s)://www.example.com/page?id = 1product = 2
  • http(s)://www.example.com/page#start
  • http(s)://www.example.com:8080
  • http(s)://127.0.0.1
  • 127.0.0.1
  • www.example.com
  • example.com
1
Marco Concas

あなたはこれを探しています

HTTPなし:

@"^(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$"

Httpで:

@"^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$"

または

@"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$";
1
sach4all

私はリンクを見つけるものを作りました-私は非常にうまくいきます:

(\b(http|ftp|https):(\/\/|\\\\)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?|\bwww\.[^\s])
1
Yinon_90

これは私のために働く:

string pattern = @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$";

Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);

string url= txtAddressBar.Text.Trim();

if(regex.IsMatch(url)
{
  //do something
}
0
Oyebisi Jemil

これは、オプションとしてhttp、httpsの両方をサポートし、URLに空白スペースが含まれていないことを検証するためです。

this.isValidURL = function (url) {

    if (!url) return false;

    const expression = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/gm;

    return url.match(new RegExp(expression));
}
0
Ali