Ich versuche, einen regulären Ausdruck festzulegen, der den Anfang eines Strings überprüft und ob er einen enthält http://
oder mit https://
ihm übereinstimmen sollte.
Wie kann ich das machen? Ich versuche Folgendes, was nicht funktioniert:
^[(http)(https)]://
[]
. Es macht ein Zeichen , das entweder(
,)
,h
,t
,t
,p
oders
. Dh es würdes://
aber nicht passenht://
oderx://
./^x/
vsindexOf(x) == 0
). Ansätze, die mit "beginnen mit" beginnen, haben möglicherweise weniger Aufwand, aber ich vermute, dass dies selten von Bedeutung ist. Wählen Sie die sauberste aus, was sehr gut sein kann:x.StartWith("http://") || x.StartsWith("https://")
- Aus Gründen der Codeklarheit und nicht aus Gründen der Leistungsverbesserung, es sei denn, dies ist gerechtfertigt Analyse und Anforderungen :-)Antworten:
Ihre Verwendung von
[]
ist falsch - beachten Sie, dass dies[]
eine Zeichenklasse bezeichnet und daher immer nur einem Zeichen entspricht. Der Ausdruck[(http)(https)]
bedeutet "Übereinstimmung mit a(
, anh
, at
, at
, ap
, a)
oder ans
". (Doppelte Zeichen werden ignoriert.)Versuche dies:
Wenn Sie wirklich Alternation verwenden möchten, verwenden Sie stattdessen diese Syntax:
quelle
^https?:\/\/
. Habe ich recht?/
ist kein Sonderzeichen in regulären Ausdrücken, sondern nur in Sprachen, in denen/
ein wörtlicher regulärer Ausdruck notiert wird . Beispielsweise ist es/
bei Verwendung von C # nicht erforderlich, in regulären Ausdrücken zu maskieren, da reguläre C # -Ausdrücke (teilweise) als Zeichenfolgenliterale ausgedrückt werden. Sie benötigen sie beispielsweise nicht in Perl (wenn Sie ein alternatives Trennzeichen wie in verwendenm#^https?://#
). Um Ihren Kommentar direkt anzusprechen: (a) Nein, ich habe nicht vergessen, irgendetwas zu entkommen. (b) Sie müssen sich den Zeichen entziehen, die speziell in der Sprache Ihrer Wahl behandelt werden.Groß- und Kleinschreibung wird nicht berücksichtigt:
quelle
Je nach Kontext müssen Sie sich möglicherweise den Schrägstrichen entziehen.
quelle
^https?:\/\/(.*)
Wo(.*)
ist Match alles andere danachhttps://
quelle
Das sollte funktionieren
quelle
Dies funktioniert auch für URL-codierte Zeichenfolgen.
quelle
Es hat in asp.net nicht funktioniert, diesen Fall unempfindlich zu machen, daher habe ich nur jeden Buchstaben angegeben.
Folgendes musste ich tun, damit es in einem asp.net RegularExpressionValidator funktioniert :
Anmerkungen:
(?i)
und die Verwendung/whatever/i
hat wahrscheinlich nicht funktioniert, weil Javascript nicht alle Funktionen berücksichtigt, bei denen zwischen Groß- und Kleinschreibung unterschieden wird^
am Anfang aber es war egal, aber das(.*)
tat (Ausdruck funktionierte nicht ohne(.*)
, aber funktionierte ohne^
)//
könnte eine gute Idee sein.Hier ist der vollständige RegularExpressionValidator, falls Sie ihn benötigen:
quelle