文字列がhttp://またはhttps://で始まるかどうかをテストする正規表現


200

私は、文字列の先頭をチェックする正規表現を設定しようとしている、そしてそれはどちらか含まれている場合、http://またはhttps://それと一致する必要があります。

どうやってやるの?うまくいかない次のことを試しています:

^[(http)(https)]://

5
文字列の先頭のみを確認する場合は、文字列の最初の数文字を探しているパターンと直接比較する方がおそらく高速です。
templatetypedef

2
キャラクターグループを作成してい[]ます。これは、マッハます1つのいずれかの文字を()httpまたはs。つまりそれは一致しますs://が、一致しません。ht://x://
Felix Kling、2011年

2
@templatetypedef:時期尚早な最適化を感じると思います。
cdhowie

4
最新の正規表現ライブラリの多くは非常に高速です。(大量の)バックトラッキングがない限り、正規表現は「index-of」スタイルのアプローチ(比較/^x/vs indexOf(x) == 0)と比較して有利またはそれ以上です。「で始まる」スタイルのアプローチはオーバーヘッドが少ないかもしれませんが、それが問題になることはまれだと思います-最もクリーンなものを選択x.StartWith("http://") || x.StartsWith("https://")してください。分析と要件:-)

回答:


353

の使用[]は正しくありません- []文字クラスを示すため、1文字にのみ一致することに注意してください。この表現[(http)(https)]は、「a (、an h、a t、a t、a p、a )、またはに一致する」に変換されsます。(重複文字は無視されます。)

これを試して:

^https?://

代替を実際に使用したい場合は、代わりに次の構文を使用します。

^(http|https)://

PHP入力文字列として:$ regex = '/ ^(https?:\ / \ /)';
スティーブタウバー14

9
スティーブ、最後に/を付け忘れたと思います:$ regex = '/ ^(https?:\ / \ /)/';
Axi、

10
誤ってhttpを大文字にしてしまった場合のために、$ regex = '/ ^(https?:\ / \ /)/ i';
jeffkee

3
\を使用してエスケープするのを忘れた。ですから^https?:\/\/。私は正しいですか?
Shafizadeh

4
@Shafizadeh /は、正規表現では特殊文字ではなく、/リテラル正規表現の表記に使用される言語でのみ使用されます。たとえば、/C#の正規表現は文字列リテラルとして(部分的に)表現されるため、C#を使用する場合は正規表現でエスケープする必要はありません。また、Perlなどでも必要ありません(のように代替の区切り文字を使用する場合m#^https?://#)。だからあなたのコメントに直接取り組むために:(a)いいえ、私は何かを逃れることを忘れていませんでした。(b)選択した言語で特別に扱われる文字をエスケープする必要があります。
cdhowie

43

大文字小文字を区別しません:

var re = new RegExp("^(http|https)://", "i");
var str = "My String";
var match = re.test(str);

25
^https?://

ただし、コンテキストによっては、スラッシュをエスケープする必要がある場合があります。




0

これは、URLエンコードされた文字列でも機能します。

^(https?)(:\/\/|(\%3A%2F%2F))

0

この大文字と小文字を区別しないようにすることはasp.netでは機能しなかったので、各文字を指定しました。

これがasp.net RegularExpressionValidatorで機能させるために私がしなければならなかったことです

[Hh][Tt][Tt][Pp][Ss]?://(.*)

ノート:

  • (?i)/whatever/iおそらくJavaScriptはすべての大文字と小文字を区別する機能を備えていないため、使用は機能しませんでした
  • 当初は^最初からありましたが、問題ではありません(.*)でした(式は、なし(.*)では機能しませんでしたが、なしでは機能しました^
  • 脱出する必要はありませんでした//が、良い考えかもしれません。

必要な場合の完全なRegularExpressionValidatorは次のとおりです。

<asp:RegularExpressionValidator ID="revURLHeaderEdit" runat="server" 
    ControlToValidate="txtURLHeaderEdit" 
    ValidationExpression="[Hh][Tt][Tt][Pp][Ss]?://(.*)"
    ErrorMessage="URL should begin with http:// or https://" >
</asp:RegularExpressionValidator>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.